⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdpcontents.cxx

📁 这是国外的resip协议栈
💻 CXX
📖 第 1 页 / 共 3 页
字号:
   }   return *this;}ostream&SdpContents::Session::Time::encode(ostream& s) const{   s << "t=" << mStart << Symbols::SPACE[0]     << mStop     << Symbols::CRLF;   for (list<Repeat>::const_iterator i = mRepeats.begin();        i != mRepeats.end(); ++i)   {      i->encode(s);   }   return s;}voidSdpContents::Session::Time::parse(ParseBuffer& pb){   pb.skipChar('t');   pb.skipChar(Symbols::EQUALS[0]);   mStart = pb.uInt32();   pb.skipChar(Symbols::SPACE[0]);   mStop = pb.uInt32();   skipEol(pb);   while (!pb.eof() && *pb.position() == 'r')   {      addRepeat(Repeat());      mRepeats.back().parse(pb);   }}voidSdpContents::Session::Time::addRepeat(const Repeat& repeat){   mRepeats.push_back(repeat);}SdpContents::Session::Time::Repeat::Repeat(unsigned long interval,                                           unsigned long duration,                                           list<int> offsets)   : mInterval(interval),     mDuration(duration),     mOffsets(offsets){}ostream&SdpContents::Session::Time::Repeat::encode(ostream& s) const{   s << "r="     << mInterval << Symbols::SPACE[0]     << mDuration << 's';   for (list<int>::const_iterator i = mOffsets.begin();        i != mOffsets.end(); ++i)   {      s << Symbols::SPACE[0] << *i << 's';   }   s << Symbols::CRLF;   return s;}intparseTypedTime(ParseBuffer& pb){   int v = pb.integer();   if (!pb.eof())   {      switch (*pb.position())      {	 case 's' :	    pb.skipChar();	    break;	 case 'm' :	    v *= 60;	    pb.skipChar();	    break;	 case 'h' :	    v *= 3600;	    pb.skipChar();       break;	 case 'd' :	    v *= 3600*24;	    pb.skipChar();      }   }   return v;}voidSdpContents::Session::Time::Repeat::parse(ParseBuffer& pb){   pb.skipChar('r');   pb.skipChar(Symbols::EQUALS[0]);   mInterval = parseTypedTime(pb);   pb.skipChar(Symbols::SPACE[0]);   mDuration = parseTypedTime(pb);   while (!pb.eof() && *pb.position() != Symbols::CR[0])   {      pb.skipChar(Symbols::SPACE[0]);      mOffsets.push_back(parseTypedTime(pb));   }   skipEol(pb);}SdpContents::Session::Timezones::Adjustment::Adjustment(unsigned long _time,                                                        int _offset)   : time(_time),     offset(_offset){}SdpContents::Session::Timezones::Adjustment::Adjustment(const Adjustment& rhs)   : time(rhs.time),     offset(rhs.offset){}SdpContents::Session::Timezones::Adjustment&SdpContents::Session::Timezones::Adjustment::operator=(const Adjustment& rhs){   if (this != &rhs)   {      time = rhs.time;      offset = rhs.offset;   }   return *this;}SdpContents::Session::Timezones::Timezones()   : mAdjustments(){}SdpContents::Session::Timezones::Timezones(const Timezones& rhs)   : mAdjustments(rhs.mAdjustments){}SdpContents::Session::Timezones&SdpContents::Session::Timezones::operator=(const Timezones& rhs){   if (this != &rhs)   {      mAdjustments = rhs.mAdjustments;   }   return *this;}ostream&SdpContents::Session::Timezones::encode(ostream& s) const{   if (!mAdjustments.empty())   {      s << "z=";      bool first = true;      for (list<Adjustment>::const_iterator i = mAdjustments.begin();           i != mAdjustments.end(); ++i)      {         if (!first)         {            s << Symbols::SPACE[0];         }         first = false;         s << i->time << Symbols::SPACE[0]           << i->offset << 's';      }      s << Symbols::CRLF;   }   return s;}voidSdpContents::Session::Timezones::parse(ParseBuffer& pb){   pb.skipChar('z');   pb.skipChar(Symbols::EQUALS[0]);   while (!pb.eof() && *pb.position() != Symbols::CR[0])   {      Adjustment adj(0, 0);      adj.time = pb.integer();      pb.skipChar(Symbols::SPACE[0]);      adj.offset = parseTypedTime(pb);      addAdjustment(adj);      if (!pb.eof() && *pb.position() == Symbols::SPACE[0])      {         pb.skipChar();      }   }   skipEol(pb);}voidSdpContents::Session::Timezones::addAdjustment(const Adjustment& adjust){   mAdjustments.push_back(adjust);}SdpContents::Session::Encryption::Encryption()   : mMethod(NoEncryption),     mKey(Data::Empty){}SdpContents::Session::Encryption::Encryption(const KeyType& method,                                             const Data& key)   : mMethod(method),     mKey(key){}SdpContents::Session::Encryption::Encryption(const Encryption& rhs)   : mMethod(rhs.mMethod),     mKey(rhs.mKey){}SdpContents::Session::Encryption&SdpContents::Session::Encryption::operator=(const Encryption& rhs){   if (this != &rhs)   {      mMethod = rhs.mMethod;      mKey = rhs.mKey;   }   return *this;}const char* KeyTypes[] = {"????", "prompt", "clear", "base64", "uri"};ostream&SdpContents::Session::Encryption::encode(ostream& s) const{   s << "k="     << KeyTypes[mMethod];   if (mMethod != Prompt)   {      s << Symbols::COLON[0] << mKey;   }   s << Symbols::CRLF;   return s;}voidSdpContents::Session::Encryption::parse(ParseBuffer& pb){   pb.skipChar('k');   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);   pb.skipToChar(Symbols::COLON[0]);   if (!pb.eof())   {      Data p;      pb.data(p, anchor);      if (p == KeyTypes[Clear])      {         mMethod = Clear;      }      else if (p == KeyTypes[Base64])      {         mMethod = Base64;      }      else if (p == KeyTypes[UriKey])      {         mMethod = UriKey;      }      anchor = pb.skipChar(Symbols::COLON[0]);      pb.skipToOneOf(Symbols::CRLF);      pb.data(mKey, anchor);   }   else   {      pb.reset(anchor);      pb.skipToOneOf(Symbols::CRLF);      Data p;      pb.data(p, anchor);      if (p == KeyTypes[Prompt])      {         mMethod = Prompt;      }   }   skipEol(pb);}SdpContents::Session::Session(int version,                              const Origin& origin,                              const Data& name)   : mVersion(version),     mOrigin(origin),     mName(name){}SdpContents::Session::Session(const Session& rhs){   *this = rhs;}SdpContents::Session&SdpContents::Session::operator=(const Session& rhs){   if (this != &rhs)   {      mVersion = rhs.mVersion;      mOrigin = rhs.mOrigin;      mName = rhs.mName;      mMedia = rhs.mMedia;      mInformation = rhs.mInformation;      mUri = rhs.mUri;      mEmails = rhs.mEmails;      mPhones = rhs.mPhones;      mConnection = rhs.mConnection;      mBandwidths = rhs.mBandwidths;      mTimes = rhs.mTimes;      mTimezones = rhs.mTimezones;      mEncryption = rhs.mEncryption;      mAttributeHelper = rhs.mAttributeHelper;      for (std::list<Medium>::iterator i=mMedia.begin(); i != mMedia.end(); ++i)      {         i->setSession(this);      }   }   return *this;}voidSdpContents::Session::parse(ParseBuffer& pb){   pb.skipChar('v');   pb.skipChar(Symbols::EQUALS[0]);   mVersion = pb.integer();   skipEol(pb);   mOrigin.parse(pb);   pb.skipChar('s');   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);   pb.skipToOneOf(Symbols::CRLF);   pb.data(mName, anchor);   skipEol(pb);   if (!pb.eof() && *pb.position() == 'i')   {      pb.skipChar('i');      const char* anchor = pb.skipChar(Symbols::EQUALS[0]);      pb.skipToOneOf(Symbols::CRLF);      pb.data(mInformation, anchor);      skipEol(pb);   }   if (!pb.eof() && *pb.position() == 'u')   {      pb.skipChar('u');      pb.skipChar(Symbols::EQUALS[0]);      mUri.parse(pb);      skipEol(pb);   }   while (!pb.eof() && *pb.position() == 'e')   {      addEmail(Email());      mEmails.back().parse(pb);   }   while (!pb.eof() && *pb.position() == 'p')   {      addPhone(Phone());      mPhones.back().parse(pb);   }   if (!pb.eof() && *pb.position() == 'c')   {      mConnection.parse(pb);   }   while (!pb.eof() && *pb.position() == 'b')   {      addBandwidth(Bandwidth());      mBandwidths.back().parse(pb);   }   while (!pb.eof() && *pb.position() == 't')   {      addTime(Time());      mTimes.back().parse(pb);   }   if (!pb.eof() && *pb.position() == 'z')   {      mTimezones.parse(pb);   }   if (!pb.eof() && *pb.position() == 'k')   {      mEncryption.parse(pb);   }   mAttributeHelper.parse(pb);   while (!pb.eof() && *pb.position() == 'm')   {      addMedium(Medium());      mMedia.back().parse(pb);   }}ostream&SdpContents::Session::encode(ostream& s) const{   s << "v=" << mVersion << Symbols::CRLF;   mOrigin.encode(s);   s << "s=" << mName << Symbols::CRLF;   if (!mInformation.empty())   {      s << "i=" << mInformation << Symbols::CRLF;   }   if (!mUri.host().empty())   {      s << "u=";      mUri.encode(s);      s << Symbols::CRLF;   }   for (list<Email>::const_iterator i = mEmails.begin();        i != mEmails.end(); ++i)   {      i->encode(s);   }   for (list<Phone>::const_iterator i = mPhones.begin();        i != mPhones.end(); ++i)   {      i->encode(s);   }   if (!mConnection.getAddress().empty())   {      mConnection.encode(s);   }   for (list<Bandwidth>::const_iterator i = mBandwidths.begin();        i != mBandwidths.end(); ++i)   {      i->encode(s);   }   if (mTimes.empty())   {      s << "t=0 0" << Symbols::CRLF;   }   else   {      for (list<Time>::const_iterator i = mTimes.begin();           i != mTimes.end(); ++i)      {         i->encode(s);      }   }   mTimezones.encode(s);   if (mEncryption.getMethod() != Encryption::NoEncryption)   {      mEncryption.encode(s);   }   mAttributeHelper.encode(s);   for (list<Medium>::const_iterator i = mMedia.begin();        i != mMedia.end(); ++i)   {      i->encode(s);   }   return s;}voidSdpContents::Session::addEmail(const Email& email){   mEmails.push_back(email);}voidSdpContents::Session::addTime(const Time& t){   mTimes.push_back(t);}voidSdpContents::Session::addPhone(const Phone& phone){   mPhones.push_back(phone);}voidSdpContents::Session::addBandwidth(const Bandwidth& bandwidth){   mBandwidths.push_back(bandwidth);}voidSdpContents::Session::addMedium(const Medium& medium){   mMedia.push_back(medium);   mMedia.back().setSession(this);}voidSdpContents::Session::addAttribute(const Data& key, const Data& value){   mAttributeHelper.addAttribute(key, value);   if (key == rtpmap)   {      for (list<Medium>::iterator i = mMedia.begin();           i != mMedia.end(); ++i)      {         i->mRtpMapDone = false;      }   }}voidSdpContents::Session::clearAttribute(const Data& key){   mAttributeHelper.clearAttribute(key);   if (key == rtpmap)   {      for (list<Medium>::iterator i = mMedia.begin();           i != mMedia.end(); ++i)      {         i->mRtpMapDone = false;      }   }}boolSdpContents::Session::exists(const Data& key) const{   return mAttributeHelper.exists(key);}const list<Data>&SdpContents::Session::getValues(const Data& key) const{   return mAttributeHelper.getValues(key);}SdpContents::Session::Medium::Medium(const Data& name,                                     unsigned long port,                                     unsigned long multicast,                                     const Data& protocol)   : mSession(0),     mName(name),     mPort(port),     mMulticast(multicast),     mProtocol(protocol),     mRtpMapDone(false){}SdpContents::Session::Medium::Medium()   : mSession(0),     mPort(0),     mMulticast(1),     mRtpMapDone(false){}SdpContents::Session::Medium::Medium(const Medium& rhs)   : mSession(0),     mName(rhs.mName),     mPort(rhs.mPort),     mMulticast(rhs.mMulticast),     mProtocol(rhs.mProtocol),     mFormats(rhs.mFormats),     mCodecs(rhs.mCodecs),     mTransport(rhs.mTransport),     mInformation(rhs.mInformation),     mConnections(rhs.mConnections),     mBandwidths(rhs.mBandwidths),     mEncryption(rhs.mEncryption),     mAttributeHelper(rhs.mAttributeHelper),     mRtpMapDone(rhs.mRtpMapDone),     mRtpMap(rhs.mRtpMap){}SdpContents::Session::Medium&SdpContents::Session::Medium::operator=(const Medium& rhs){   if (this != &rhs)   {      mSession = 0;      mName = rhs.mName;      mPort = rhs.mPort;      mMulticast = rhs.mMulticast;      mProtocol = rhs.mProtocol;      mFormats = rhs.mFormats;      mCodecs = rhs.mCodecs;      mTransport = rhs.mTransport;      mInformation = rhs.mInformation;      mConnections = rhs.mConnections;      mBandwidths = rhs.mBandwidths;      mEncryption = rhs.mEncryption;      mAttributeHelper = rhs.mAttributeHelper;      mRtpMapDone = rhs.mRtpMapDone;      mRtpMap = rhs.mRtpMap;   }   return *this;}voidSdpContents::Session::Medium::setPort(int port){   mPort = port;}voidSdpContents::Session::Medium::setSession(Session* session){   mSession = session;}voidSdpContents::Session::Medium::parse(ParseBuffer& pb){   pb.skipChar('m');   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);   pb.skipToChar(Symbols::SPACE[0]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -