2 * @file RTSPRequest.cpp
\r
7 #include <Raym/Log.h>
\r
8 #include "net/RTSPRequest.h"
\r
10 using namespace Raym;
\r
15 RTSPRequest::RTSPRequest()
\r
19 RTSPRequest::~RTSPRequest()
\r
23 RTSPRequest *RTSPRequest::requestWithSocket(SOCKET sock)
\r
25 DebugLog2("%s", __FUNCTION__);
\r
29 while (offset < sizeof(buf) - 1)
\r
31 int len = recv(sock, &buf[offset], 1, 0);
\r
38 if ((buf[offset - 1] == '\r') && (buf[offset] == '\n'))
\r
48 DebugLog2("request line: %s", buf);
\r
50 RTSPRequest *result = NULL;
\r
52 String *method = NULL;
\r
54 String *version = NULL;
\r
55 if (strchr(buf, ' ') != NULL)
\r
57 char *p = strchr(buf, ' ');
\r
59 if ((buf[strlen(buf) - 2] == '\r') && (buf[strlen(buf) - 1] == '\n'))
\r
61 buf[strlen(buf) - 2] = '\0';
\r
63 method = String::alloc()->initWithUTF8String(&buf[0]);
\r
68 if (strchr(p, ' ') != NULL)
\r
70 char *p2 = strchr(p, ' ');
\r
72 if ((p[strlen(p) - 2] == '\r') && (p[strlen(p) - 1] == '\n'))
\r
74 p[strlen(p) - 2] = '\0';
\r
76 uri = String::alloc()->initWithUTF8String(p);
\r
81 if (strchr(p2, ' ') == NULL)
\r
83 if ((p2[strlen(p2) - 2] == '\r') && (p2[strlen(p2) - 1] == '\n'))
\r
85 p2[strlen(p2) - 2] = '\0';
\r
87 version = String::alloc()->initWithUTF8String(p2);
\r
94 DebugLog3("method: %s", method->cString());
\r
98 DebugLog3("uri: %s", uri->cString());
\r
100 if (version != NULL)
\r
102 DebugLog3("version: %s", version->cString());
\r
105 if (version != NULL)
\r
107 if (version->isMatch("^(HTTP/1.[01]|RTSP/1.0)$"))
\r
109 InternetTextMessageHeader *header = InternetTextMessageHeader::alloc()->initWithSocket(sock);
\r
110 if (header != NULL)
\r
112 InternetTextMessageBody *body = NULL;
\r
114 if (header->fieldBodyForName("Transfer-Encoding") != NULL)
\r
116 DebugLog3("has Transfer-Encoding\n");
\r
119 else if (header->fieldBodyForName("Content-Length") != NULL)
\r
121 DebugLog3("has Content-Length\n");
\r
124 else if (header->fieldBodyForName("Content-Type") != NULL)
\r
126 DebugLog3("has Content-Type\n");
\r
131 InternetTextMessage *message = InternetTextMessage::alloc()->initWithHeaderAndBody(header, body);
\r
135 result = new RTSPRequest();
\r
136 result->setMethod(method);
\r
137 result->setURI(uri);
\r
138 result->setVersion(version);
\r
139 result->setMessage(message);
\r
140 result->autorelease();
\r
146 DebugLog3("error: InternetTextMessageHeader::headerWithSocket()\n");
\r
158 const char *RTSPRequest::className()
\r
160 return "RTSPRequest";
\r