📄 rtpclient.c
字号:
#include "socket.h"#include "ip4.h"#include "ip6.h"#include "uint16.h"#include "open.h"#include "byte.h"#include "scan.h"#include "strerr.h"#include <stdlib.h>#include <sys/time.h>#include <unistd.h>/* usage: anycast (ip4|\[ip6\]):port ... *//* return pointer to first byte of payload data */char *rtp_skipheader(unsigned char *packet) { char v=packet[0]>>6; char cc=packet[0] & 15; if (v==2) return packet+12+(cc*4); else return packet;}/* initialize RTP header according to RFC; version=2, all flags zero, * payload type as specified and sequence number, timestamp and SSRC * random. */void rtp_initheader(char *header, char payloadtype) { int fd=open_read("/dev/urandom"); int i; for (i=2; i<12; i++) header[i]=rand() & 255; read(fd,header+2,10); header[0]=0x80; header[1]=payloadtype;}/* increment sequence number */void rtp_nextsequence(char *header) { uint16 s; uint16_unpack_big(header+2,&s); s++; uint16_pack_big(header+2,s);}/* read sequence number */uint16 rtp_getsequence(char *header) { uint16 s; uint16_unpack_big(header+2,&s); return s;}/* read payload type */char rtp_getpt(char *header) { return header[1]<<1;}int main(int argc,char *argv[]) { char buf[1500]; unsigned char ip[16]; long len,port=5004; int v6=0; int s; if (argc<2) strerr_die1x(0,"usage: rtpclient ip [port]\nWill dump rtp payloads to stdout, default port is 5004."); if (argc>2) { len=scan_ulong(argv[2],&port); if (argv[2][len]) strerr_die1x(0,"rtpclient: invalid port number: parse error."); if (port>0xffff) strerr_die1x(0,"rtpclient: invalid port number: too large."); } len=ip4_scan(argv[1],ip); if (argv[1][len]) { len=ip6_scan(argv[1],ip); if (argv[1][len]) strerr_die1x(0,"rtpclient: invalid ip: parse error."); v6=1; } if (v6) { if ((s=socket_udp6())==-1) strerr_die1sys(111,"anycast: unable to create UDP socket: "); ndelay_off(s); if (socket_bind6_reuse(s,(char *)V6any,port,0) == -1) strerr_die1sys(111,"anycast: unable to bind: "); if (ip[0]==0xff) if (socket_mcjoin6(s,ip,0) == -1) strerr_die1sys(111,"anycast: unable to join multicast group: "); } else { if ((s=socket_udp())==-1) strerr_die1sys(111,"anycast: unable to create UDP socket: "); ndelay_off(s); if (socket_bind4_reuse(s,(char *)V6any,port) == -1) strerr_die1sys(111,"anycast: unable to bind: "); if ((ip[0] & 0xf0) == 0xe0) if (socket_mcjoin4(s,ip,(char*)V6any) == -1) strerr_die1sys(111,"anycast: unable to join multicast group: "); } for (;;) { unsigned char src_ip[16]; uint16 src_port; uint32 scope_id; char *tmp; if (v6) { if ((len=socket_recv6(s,buf,1500,src_ip,&src_port,&scope_id))==-1) strerr_die1sys(111,"anycast: IPv6 recvmsg failed: "); } else { if ((len=socket_recv4(s,buf,1500,src_ip,&src_port))==-1) strerr_die1sys(111,"anycast: IPv4 recvmsg failed: "); } tmp=rtp_skipheader(buf); write(1,tmp,len-(tmp-buf)); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -