Loading codec/c++/sip_codets.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,8 @@ private: SIP_HEADER_ADD (Session-Expires, , sessionExpires, SESSION_EXPIRES_E); SIP_HEADER_ADD (Min-SE, , minSE, MIN_SE_E); SIP_HEADER_ADD (History-Info, , historyInfo, HISTORY_INFO_E); SIP_HEADER_ADD (P-Early-Media, , pEarlyMedia, P_EARLY_MEDIA_E); SIP_HEADER_ADD (P-Asserted-Service, , pAssertedService, P_ASSERTED_SERVICE_E); { mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, "")); Entry& e = *mEntries.rbegin(); Loading Loading @@ -856,6 +858,7 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError) case id_pVisitedNetworkID: case id_acceptContact: case id_historyInfo: case id_pEarlyMedia: case id_undefinedHeader_List: // these fields can appear multiple times break; Loading Loading @@ -2504,4 +2507,56 @@ void HistoryInfo_List::PostDecodeField (int id, Buffer& buffer) throw (DecodeErr SetHypSize (-2); } void CharstringList::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); if (GetSize() == 0) reg_token.AssertMatch(buffer, this); else if (!reg_token.Match(buffer)) { SetHypSize(-2); return; } SetHypFieldLength(reg_token.GetMatchedLength()); } void CharstringList::PreDecode (Buffer& buffer) throw (DecodeError) { SetHypSize (GetSize() + 1); SetHypAppend (1); } void CharstringList::PostDecodeField (int id, Buffer& buffer) throw (DecodeError) { if (detect_comma (buffer)) SetHypSize (GetSize() + 1); else SetHypSize (-2); } void PEarlyMedia::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); switch (id) { case id_em_param: if (reg_token.Match (buffer) || Get_em_param().GetSize() > 0) { SetHypFieldIsPresent (id, 1); } else SetHypFieldIsPresent (id, 0); break; } } void PAssertedService::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); switch (id) { case id_pAssertedServiceValue: reg_token.AssertMatch (buffer, this); SetHypFieldLength(id, reg_token.GetMatchedLength()); break; } } }} // namespaces Loading
codec/c++/sip_codets.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,8 @@ private: SIP_HEADER_ADD (Session-Expires, , sessionExpires, SESSION_EXPIRES_E); SIP_HEADER_ADD (Min-SE, , minSE, MIN_SE_E); SIP_HEADER_ADD (History-Info, , historyInfo, HISTORY_INFO_E); SIP_HEADER_ADD (P-Early-Media, , pEarlyMedia, P_EARLY_MEDIA_E); SIP_HEADER_ADD (P-Asserted-Service, , pAssertedService, P_ASSERTED_SERVICE_E); { mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, "")); Entry& e = *mEntries.rbegin(); Loading Loading @@ -856,6 +858,7 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError) case id_pVisitedNetworkID: case id_acceptContact: case id_historyInfo: case id_pEarlyMedia: case id_undefinedHeader_List: // these fields can appear multiple times break; Loading Loading @@ -2504,4 +2507,56 @@ void HistoryInfo_List::PostDecodeField (int id, Buffer& buffer) throw (DecodeErr SetHypSize (-2); } void CharstringList::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); if (GetSize() == 0) reg_token.AssertMatch(buffer, this); else if (!reg_token.Match(buffer)) { SetHypSize(-2); return; } SetHypFieldLength(reg_token.GetMatchedLength()); } void CharstringList::PreDecode (Buffer& buffer) throw (DecodeError) { SetHypSize (GetSize() + 1); SetHypAppend (1); } void CharstringList::PostDecodeField (int id, Buffer& buffer) throw (DecodeError) { if (detect_comma (buffer)) SetHypSize (GetSize() + 1); else SetHypSize (-2); } void PEarlyMedia::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); switch (id) { case id_em_param: if (reg_token.Match (buffer) || Get_em_param().GetSize() > 0) { SetHypFieldIsPresent (id, 1); } else SetHypFieldIsPresent (id, 0); break; } } void PAssertedService::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) { static Regex reg_token ("^" SIPREG_TOKEN); switch (id) { case id_pAssertedServiceValue: reg_token.AssertMatch (buffer, this); SetHypFieldLength(id, reg_token.GetMatchedLength()); break; } } }} // namespaces