//parse all fields in the header GF_Err RTSP_ParseResponseHeader(GF_RTSPSession *sess, GF_RTSPResponse *rsp, u32 BodyStart) { char LineBuffer[1024]; char ValBuf[400]; char *buffer; s32 Pos, ret; u32 Size; Size = sess->CurrentSize - sess->CurrentPos; buffer = sess->TCPBuffer + sess->CurrentPos; //parse first line ret = gf_token_get_line(buffer, 0, Size, LineBuffer, 1024); if (ret < 0) return GF_REMOTE_SERVICE_ERROR; //RTSP/1.0 Pos = gf_token_get(LineBuffer, 0, " \t\r\n", ValBuf, 400); if (Pos <= 0) return GF_REMOTE_SERVICE_ERROR; if (strcmp(ValBuf, GF_RTSP_VERSION)) return GF_SERVICE_ERROR; //CODE Pos = gf_token_get(LineBuffer, Pos, " \t\r\n", ValBuf, 400); if (Pos <= 0) return GF_REMOTE_SERVICE_ERROR; rsp->ResponseCode = atoi(ValBuf); //string info Pos = gf_token_get(LineBuffer, Pos, "\t\r\n", ValBuf, 400); if (Pos > 0) rsp->ResponseInfo = gf_strdup(ValBuf); return gf_rtsp_parse_header(buffer + ret, Size - ret, BodyStart, NULL, rsp); }
GF_Err RTSP_ParseCommandHeader(GF_RTSPSession *sess, GF_RTSPCommand *com, u32 BodyStart) { char LineBuffer[1024]; char ValBuf[1024]; char *buffer; s32 Pos, ret; u32 Size; Size = sess->CurrentSize - sess->CurrentPos; buffer = sess->TCPBuffer + sess->CurrentPos; //by default the command is wrong ;) com->StatusCode = NC_RTSP_Bad_Request; //parse first line ret = gf_token_get_line(buffer, 0, Size, LineBuffer, 1024); if (ret < 0) return GF_REMOTE_SERVICE_ERROR; //method Pos = gf_token_get(LineBuffer, 0, " \t\r\n", ValBuf, 1024); if (Pos <= 0) return GF_OK; com->method = gf_strdup((const char *) ValBuf); //URL Pos = gf_token_get(LineBuffer, Pos, " \t\r\n", ValBuf, 1024); if (Pos <= 0) return GF_OK; com->service_name = gf_strdup(ValBuf); //RTSP version Pos = gf_token_get(LineBuffer, Pos, "\t\r\n", ValBuf, 1024); if (Pos <= 0) return GF_OK; if (strcmp(ValBuf, GF_RTSP_VERSION)) { com->StatusCode = NC_RTSP_RTSP_Version_Not_Supported; return GF_OK; } com->StatusCode = NC_RTSP_OK; return gf_rtsp_parse_header(buffer + ret, Size - ret, BodyStart, com, NULL); }