RTSP调试代码 (三)
ockaddr*)&addr, &nlen) < 0)
lret = -1;
else
{
lret = 0;
*port = addr.sin_port;
}
return lret;
}
long ReadSocket(int sock, char *buf, int len, int timeout )
{
long lret ;
int iret;
fd_set fr;
timeva l tm;
tm.tv_sec = timeout;
tm.tv_usec = 0;
FD_ZERO(&fr);
fr.fd_count = 1;
fr.fd_array[0] = sock;
lret = select(sock, &fr, NULL, NULL, &tm);
if(lret > 0)
{
lret = recv(sock, buf, len, 0);
if(lret == SOCKET_ERROR)
{
}
else if(lret > 0)
{
logwr((void*)"***Recive:\r\n", 12);
logwr((void*)buf, lret);
}
}
return lret;
}
long SendRTSPCmd( int sock, const char *cmd, const char *szparam )
{
long lret;
int ilen;
ilen = strlen(szparam);
lret = send(sock, szparam, ilen,0);
if(lret == SOCKET_ERROR)
{
lret = WSAGetLastError();
}
logwr((void*)"***Send:\r\n", 10);
logwr((void *)szparam, ilen);
return lret;
}
char * GetRTSPCmd( const char * szName)
{
char *str = NULL;
char const* cmdFmt = NULL;
if(!strcmp(szName, "OPTIONS"))
{
cmdFmt =
"OPTIONS %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"%s"
"%s"
#ifdef SUPPORT_REAL_RTSP
REAL_OPTIONS_HEADERS
#endif
"\r\n";
}
else if(!strcmp(szName, "ANNOUNCE"))
{
cmdFmt =
"ANNOUNCE %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Content-Type: application/sdp\r\n"
"%s"
"Content-length: %d\r\n\r\n"
"%s";
}
else if(!strcmp(szName, "PLAY"))
{
cmdFmt ="PLAY %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"%s"
"%s"
"%s"
"%s"
"\r\n";
}
else if(!strcmp(szName, "PAUSE"))
{
cmdFmt =
"PAUSE %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"%s"
"%s"
"\r\n";
}
else if(!strcmp(szName, "RECORD"))
{
cmdFmt =
"RECORD %s%s%s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"Range: npt=0-\r\n"
"%s"
"%s"
"\r\n";
}
else if(!strc
mp(szName, "SET_PARAMETER"))
{
cmdFmt =
"SET_PARAMETER %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"%s"
"%s"
"Content-length: %d\r\n\r\n"
"%s: %s\r\n";
}
else if(!strcmp(szName, "GET_PARAMETER"))
{
cmdFmt =
"GET_PARAMETER %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"%s"
"%s"
"Content-type: text/parameters\r\n"
"Content-length: %d\r\n\r\n"
"%s\r\n";
}
else if(!strcmp(szName, "TEARDOWN"))
{
cmdFmt =
"TEARDOWN %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Session: %s\r\n"
"%s"
"%s"
"\r\n";
}
else if(!strcmp(szName, "DESCRIBE"))
{
cmdFmt =
"DESCRIBE %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"%s"
"%s"
"%s"
#ifdef SUPPORT_REAL_RTSP
REAL_DESCRIBE_HEADERS
#endif
"\r\n";
}
else if(!strcmp(szName, "ANNOUNCE"))
{
cmdFmt =
"ANNOUNCE %s RTSP/1.0\r\n"
"CSeq: %d\r\n"
"Content-Type: application/sdp\r\n"
"%s"
"Content-length: %d\r\n\r\n"
"%s";
}
else if(!strcmp(szName, "SETUP"))
{
cmdFmt ="SETUP %s"
"CSeq: %d\r\n"
"%s"
"%s"
"%s"
"%s"
"\r\n";
}
str = (char*)cmdFmt;
return str;
}
char * GetOptionCmd( char *url )
{
int nlen, iret;
char *ss;
char *s = GetRTSPCmd("OPTIONS");
nlen = strlen(s);
iret = nlen + strlen(url) + strlen(PP_NAME) + 200;
ss = (char*)malloc(iret);
sprintf(ss, s, url, 1, PP_NAME, PP_CRLF);
return ss;
}
char * GetDescribeCmd( char *url )
{
int nlen, iret;
char *ss;
char *s = GetRTSPCmd("DESCRIBE");
nlen = strlen(s);
iret = nlen + strlen(url) + strlen(PP_NAME) + 200;
ss = (char*)malloc(iret);
sprintf(ss, s, url, 2, PP_NAME, PP_CRLF, PP_CRLF);
return ss;
}
char * GetPlayCmd( char *url , char *session, char *range)
{
int nlen, iret;
char *ss;
char *s = GetRTSPCmd("PLAY");
nlen = strlen(s);
iret = nlen + strlen(url) + strlen(PP_NAME) + 200;
ss = (char*)malloc(iret);
//