1#if defined(HAVE_CONFIG_H)
15#define RESIPROCATE_SUBSYSTEM Subsystem::SIP
38 mMessage(rhs.mMessage ? new
SipMessage(*rhs.mMessage) : 0)
76 static Mime type(
"message",
"sipfrag");
104SipFrag::hasStartLine(
char* buffer,
int size)
113 pbCheck.skipWhitespace();
116 if ((pbCheck.end() - pbCheck.position()) > 4 &&
117 strncmp(pbCheck.position(),
"SIP/", 4) == 0)
131 if (pbCheck.position() == pbCheck.start())
136 if ((pbCheck.end() - pbCheck.position()) > 4 &&
137 strncmp(pbCheck.position(),
"SIP/", 4) == 0)
149 pbCheck.skipWhitespace();
150 pbCheck.skipToOneOf(
" \t:\r\n");
151 while(!pbCheck.eof())
153 switch(*pbCheck.position())
180 const char *constBuffer = pb.
position();
181 char *buffer =
const_cast<char *
>(constBuffer);
190 msgHeaderScanner.
prepareForFrag(mMessage, hasStartLine(buffer, (
int)size));
191 enum { sentinelLength = 4 };
193 static const char* sentinel=
"\r\n\r\n";
194 char *termCharArray = buffer + size;
195 memcpy(scratchpad,termCharArray,4);
202 memcpy(termCharArray,sentinel,4);
207 char *scanTermCharPtr;
210 (
unsigned int)(size + sentinelLength),
213 memcpy(termCharArray,scratchpad,4);
224 CerrLog(<<
"not MsgHeaderScanner::scrEnd");
225 pb.
fail(__FILE__, __LINE__);
229 size_t used = scanTermCharPtr - buffer;
233 if (mMessage->
exists(h_ContentLength))
235 mMessage->
setBody(scanTermCharPtr,
236 static_cast<int>(size - used));
242 if (mMessage->
exists(h_ContentLength))
244 pb.
reset(buffer + used);
Base class for all SIP body types.
Contents & operator=(const Contents &rhs)
Assignment operator.
Represents the "media-type" element in the RFC 3261 grammar.
Provides string-parsing functionality with protection from buffer overflow.
CurrentPosition position() const
void reset(const char *pos)
CurrentPosition skipChars(const char *cs)
void assertNotEof() const
void fail(const char *file, unsigned int line, const Data &errmsg=Data::Empty) const
SIP body type for holding SipFrag contents (MIME content-type message/sipfrag).
SipFrag & operator=(const SipFrag &rhs)
virtual void parse(ParseBuffer &pb)
virtual EncodeStream & encodeParsed(EncodeStream &str) const
SipFrag(const Mime &contentsType=getStaticType())
static const Mime & getStaticType()
virtual Contents * clone() const
duplicate an SipFrag object
Represents a SIP message.
void setBody(const char *start, uint32_t len)
bool exists(const HeaderBase &headerType) const
Returns true if the given header field is present, false otherwise.
virtual EncodeStream & encodeSipFrag(EncodeStream &str) const
static const char * SPACE
dcm! – add UnusedChecking(_enum) below;