RTSP调试代码 (四)
char buf[128] = {0};
//sprintf(buf, "Session: %s\r\n", session);
sprintf(ss, s, url, 4, session, range, PP_NAME, PP_CRLF, PP_CRLF);
return ss;
}
char * GetSetupCmd( char *url , int port1, int port2)
{
int nlen, iret;
char *ss;
char *s = GetRTSPCmd("SETUP");
nlen = strlen(s);
iret = nlen + strlen(url) + strlen(PP_NAME) + 200;
ss = (char*)malloc(iret);
char buf[128] = {0};
char buf2[128] = {0};
if(port1 == 0)
strcpy(buf, "\r\nTransport: RTP/AVP/TCP;unicast;interleaved=0-1");
else
sprintf(buf, "\r\nTransport: RTP/AVP;unicast;client_port=%d-%d", ntohs(port2), ntohs(port1));
//sprintf(buf2, "SETUP %s/streamid=0 RTSP/1.0\r\n", url);
//sprintf(ss, s, buf2, 3, buf, PP_NAME, PP_CRLF, PP_CRLF);
sprintf(buf2, "%s/track1 RTSP/1.0\r\n", url);
sprintf(ss, s, buf2, 3, PP_NAME, buf, PP_CRLF, PP_CRLF);
return ss;
}
long PraseURL( const char *url, char *szip, int *iport )
{
long lret = -1;
if(url)
{
//找到了rtsp这个标识符
if(!_strnicmp(url, "rtsp://", 7))
{
//找ip
char *s, *ss;
s = (char*)url + strlen("rtsp://");
ss = strchr(s, '/');
strncpy(szip, s, ss- s);
szip[ss -s] = '\0';
//查找下是否是有端口设置
s = strchr(szip, ':');
//有端口设置
if(s)
{
ss = s;
s ++;
*iport = atoi(s);
//同时修正ip地址
szip[ss - szip] = '/0';
}
else
*iport = 554;
lret = 0;
}
}
return lret;
}
long logwr( void *data, int len )
{
long lret = -1;
if(fp)
lret = fwrite(data, 1, len, fp);
return lret;
}
static char* getLine(char* startOfLine) {
// returns the start of the next line, or NULL if none
for (char* ptr = startOfLine; *ptr != '\0'; ++ptr) {
// Check for the end of line: \r\n (but also accept \r or \n by itself):
if (*ptr == '\r' || *ptr == '\n') {
// We found the end of the line
if (*ptr == '\r') {
*ptr++ = '\0';
if (*ptr == '\n') ++ptr;
} else {
*ptr++ = '\0';
}
return ptr;
}
}
return NULL;
}
long GetResponseCode( const char *sz )
{
long lret = -1;
if(sz)
{
if(sscanf(sz, "%*s%u", &lret) != 1)
;
}
return lret;
}
long PraseDescribeCmd( const char *sz )
{
long lret = -1;
char *ss, *szst;
szst = (char *)sz;
int contentLength = -1;
if(GetResponseCode(sz )== 200)
{
ss= getLine(szst);
while(1)
{
ss = getLine(ss);
if(ss == NULL)
break;
if (sscanf(ss, "Content-Length: %d", &contentLength) == 1
|| sscanf(ss, "Content-length: %d", &contentLength) == 1) {
if (contentLength < 0) {
//....
}
}
}
}
return lret;
}
long PraseSetupCmd( const char *sz , char *sess)
{
long lret = -1;
char *ss, *szst;
szst = (char *)sz;
int contentLength = -1;
if(GetResponseCode(sz )== 200)
{
ss= getLine(szst);
while(1)
{
ss = getLine(ss);
if(ss == NULL)
break;
if (sscanf(ss, "Session: %sP4 192.168.10.177", sess) == 1)
{
lret = 1;
return lret;
}
}
}
return lret;
}