协议定义username,len,value; while 读取;2个switch,case解析.读取value
struct stun_attr {//每种协议都是username,len,value
unsigned short attr; //username
unsigned short len; //len
unsigned char value[0]; //根据len直接分配,不需要向value*一样手动在分配一次.
} __attribute__((packed));
太经典了,嵌入式,不用深拷贝。使用
struct stun_attr *stunmsg;
struct stun_attr *attr;
data = buf + sizeof(struct stun_header);
switch (ntohs(hdr->msgtype)) {
while(len) {
attr = (struct stun_attr*)data; //太经典了,直接根据
switch (ntohs(attr->attr)) {//转发stun request
case STUN_XOR_MAPPED_ADDRESS:
{
struct stun_addr* aa =(struct stun_addr*)attr->value;
}
break;
}
data += ntohs(attr->len) + sizeof(struct stun_attr);
len -= ntohs(attr->len) + sizeof(struct stun_attr);
}