@@ -96,7 +96,7 @@ namespace http {
|
||||
pos_c = url.find('@', pos_p); /* find end of 'user' or 'user:pass' part */
|
||||
if (pos_c != std::string::npos && (pos_s == std::string::npos || pos_s > pos_c)) {
|
||||
std::size_t delim = url.find(':', pos_p);
|
||||
if (delim != std::string::npos && delim < pos_c) {
|
||||
if (delim && delim != std::string::npos && delim < pos_c) {
|
||||
user = url.substr(pos_p, delim - pos_p);
|
||||
delim += 1;
|
||||
pass = url.substr(delim, pos_c - delim);
|
||||
|
@@ -578,9 +578,7 @@ namespace stream
|
||||
if (m_SentPackets.empty () && m_SendBuffer.IsEmpty ()) // nothing to send
|
||||
{
|
||||
m_Status = eStreamStatusClosed;
|
||||
// close could be called from another thread so do SendClose from the destination thread
|
||||
// this is so m_LocalDestination.NewPacket () does not trigger a race condition
|
||||
m_Service.post(std::bind(&Stream::SendClose, shared_from_this()));
|
||||
SendClose();
|
||||
}
|
||||
break;
|
||||
case eStreamStatusClosed:
|
||||
|
@@ -165,6 +165,9 @@ namespace stream
|
||||
void AsyncReceive (const Buffer& buffer, ReceiveHandler handler, int timeout = 0);
|
||||
size_t ReadSome (uint8_t * buf, size_t len) { return ConcatenatePackets (buf, len); };
|
||||
|
||||
void AsyncClose() { m_Service.post(std::bind(&Stream::Close, shared_from_this())); };
|
||||
|
||||
/** only call close from destination thread, use Stream::AsyncClose for other threads */
|
||||
void Close ();
|
||||
void Cancel () { m_ReceiveTimer.cancel (); };
|
||||
|
||||
|
Reference in New Issue
Block a user