Skip to content

hosten1/WebRTC_Tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebRTC_Buffer

webrtc bitBuffer ByteBuffer 这个库 主要是提取WebRTC的一些工具类,每一个文件下的基本都能够独立使用; 因为是WebRTC的代码,其中有些gn中定义的宏,需要在各个平台编译的时候加入,不然会有编译错误; 主要的宏有

#defined(WEBRTC_WIN)
#defined(WEBRTC_POSIX)

按照以下方式可以构建一个stun的bind消息

    StunMessage request;
    request.SetType(STUN_BINDING_REQUEST);
    std::string str =   reinterpret_cast<const char*>(kRfc5769SampleMsgTransactionId);
    request.SetTransactionID(str);
    /*
  //           MD5加密文本:lym:example.org:123456
  //           turnKey = 8812c1afb0e203aae88c996e30ac7db6
  //           unsigned char  data[7] = "123456";
  //           hmac_sha1加密后数据 = b103f699ef12c04ab6f0cb155ac2f12ef84adf22
  //           */
    std::string key;
    ComputeStunCredentialHash("lym","example.org","123456", &key);
    request.AddMessageIntegrity(key);
    const StunByteStringAttribute* mi_attr =
    request.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY);
      printfX("StunTest_AddMessageIntegrity MD5 ",mi_attr->bytes(), mi_attr->length());
    
    request.AddAttribute(std::make_unique<StunByteStringAttribute>(STUN_ATTR_USERNAME, "username"));
    request.AddAttribute(std::make_unique<StunUInt32Attribute>(STUN_ATTR_RETRANSMIT_COUNT, 1));
    request.AddAttribute(std::make_unique<StunByteStringAttribute>(STUN_ATTR_SOFTWARE, "{\"name\":\"lym\",\"age\":10,\"body\":\"haha\"}"));
    rtc::ByteBufferWriter writer;
    request.Write(&writer);

获取数据的使用writer.Data()就能获取到二进制数据;

按照以下方式可以解析一个stun的消息

  StunMessage msg;
    rtc::ByteBufferReader buf(writer.Data() , writer.Length());
    msg.Read(&buf);
    const StunByteStringAttribute *soft_attr = msg.GetByteString(STUN_ATTR_SOFTWARE);
    std::string soft_attrStr = mi_attr->GetString();
    printf("test_sendBindMsg soft_attr %s %zu",soft_attrStr.c_str(), mi_attr->length());

About

webrtc bitBuffer ByteBuffer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published