📄 sipmessage.hxx
字号:
// unknown header interface
const StringCategories& header(const ExtensionHeader& symbol) const;
StringCategories& header(const ExtensionHeader& symbol);
bool exists(const ExtensionHeader& symbol) const;
void remove(const ExtensionHeader& symbol);
// typeless header interface
const HeaderFieldValueList* getRawHeader(Headers::Type headerType) const;
void setRawHeader(const HeaderFieldValueList* hfvs, Headers::Type headerType);
const UnknownHeaders& getRawUnknownHeaders() const {return mUnknownHeaders;}
Contents* getContents() const;
// removes the contents from the message
std::auto_ptr<Contents> releaseContents();
void setContents(const Contents* contents);
void setContents(std::auto_ptr<Contents> contents);
// transport interface
void setStartLine(const char* start, int len);
void setBody(const char* start, UInt32 len);
// add HeaderFieldValue given enum, header name, pointer start, content length
void addHeader(Headers::Type header,
const char* headerName, int headerLen,
const char* start, int len);
// Interface used to determine which Transport was used to receive a
// particular SipMessage. If the SipMessage was not received from the
// wire, getReceivedTransport() returns 0. Set in constructor
const Transport* getReceivedTransport() const { return mTransport; }
// Returns the source tuple that the message was received from
// only makes sense for messages received from the wire
void setSource(const Tuple& tuple) { mSource = tuple; }
const Tuple& getSource() const { return mSource; }
// Used by the stateless interface to specify where to send a request/response
void setDestination(const Tuple& tuple) { mDestination = tuple; }
Tuple& getDestination() { return mDestination; }
void addBuffer(char* buf);
// returns the encoded buffer which was encoded by
// TransportSelector::transmit()
// !!! should only be called by the TransportSelector !!!
Data& getEncoded();
// returns the compartment ID which was computed by
// TransportSelector::transmit()
// !!! should only be called by the TransportSelector !!!
Data& getCompartmentId();
UInt64 getCreatedTimeMicroSec() {return mCreatedTime;}
// deal with a notion of an "out-of-band" forced target for SIP routing
void setForceTarget(const Uri& uri);
void clearForceTarget();
const Uri& getForceTarget() const;
bool hasForceTarget() const;
const Data& getTlsDomain() const { return mTlsDomain; }
void setTlsDomain(const Data& domain) { mTlsDomain = domain; }
const std::list<Data>& getTlsPeerNames() const { return mTlsPeerNames; }
void setTlsPeerNames(const std::list<Data>& tlsPeerNames) { mTlsPeerNames = tlsPeerNames; }
Data getCanonicalIdentityString() const;
SipMessage& mergeUri(const Uri& source);
void setSecurityAttributes(std::auto_ptr<SecurityAttributes>) const;
const SecurityAttributes* getSecurityAttributes() const { return mSecurityAttributes.get(); }
void addOutboundDecorator(MessageDecorator *md){mOutboundDecorators.push_back(md);}
void callOutboundDecorators(const Tuple &src, const Tuple &dest);
protected:
void cleanUp();
private:
void compute2543TransactionHash() const;
std::ostream&
encode(std::ostream& str, bool isSipFrag) const;
void copyFrom(const SipMessage& message);
HeaderFieldValueList* ensureHeaders(Headers::Type type, bool single);
HeaderFieldValueList* ensureHeaders(Headers::Type type, bool single) const; // throws if not present
// indicates this message came from the wire, set by the Transport
bool mIsExternal;
// raw text corresponding to each typed header (not yet parsed)
mutable HeaderFieldValueList* mHeaders[Headers::MAX_HEADERS];
// raw text corresponding to each unknown header
mutable UnknownHeaders mUnknownHeaders;
// !jf!
const Transport* mTransport;
// For messages received from the wire, this indicates where it came
// from. Can be used to get to the Transport and/or reliable Connection
Tuple mSource;
// Used by the TU to specify where a message is to go
Tuple mDestination;
// Raw buffers coming from the Transport. message manages the memory
std::vector<char*> mBufferList;
// special case for the first line of message
mutable HeaderFieldValueList* mStartLine;
// raw text for the contents (all of them)
mutable HeaderFieldValue* mContentsHfv;
// lazy parser for the contents
mutable Contents* mContents;
// cached value of a hash of the transaction id for a message received
// from a 2543 sip element. as per rfc3261 see 17.2.3
mutable Data mRFC2543TransactionId;
// is a request or response
mutable bool mRequest;
mutable bool mResponse;
bool mInvalid;
resip::Data mReason;
Data mEncoded; // to be retransmitted
Data mCompartmentId; // for retransmissions
UInt64 mCreatedTime;
// used when next element is a strict router OR
// client forces next hop OOB
Uri* mForceTarget;
// domain associated with this message for tls cert
Data mTlsDomain;
// peers domain associate with this message (MTLS)
std::list<Data> mTlsPeerNames;
mutable std::auto_ptr<SecurityAttributes> mSecurityAttributes;
std::vector<MessageDecorator*> mOutboundDecorators;
friend class TransportSelector;
};
}
#undef ensureHeaderTypeUseable
#undef ensureSingleHeader
#undef ensureMultiHeader
#undef defineHeader
#undef defineMultiHeader
#endif
/* ====================================================================
* The Vovida Software License, Version 1.0
*
* Copyright (c) 2000 Vovida Networks, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The names "VOCAL", "Vovida Open Communication Application Library",
* and "Vovida Open Communication Application Library (VOCAL)" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact vocal@vovida.org.
*
* 4. Products derived from this software may not be called "VOCAL", nor
* may "VOCAL" appear in their name, without prior written
* permission of Vovida Networks, Inc.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
* NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
* IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* ====================================================================
*
* This software consists of voluntary contributions made by Vovida
* Networks, Inc. and many individuals on behalf of Vovida Networks,
* Inc. For more information on Vovida Networks, Inc., please see
* <http://www.vovida.org/>.
*
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -