GF_EXPORT void gf_rtsp_command_reset(GF_RTSPCommand *com) { GF_RTSPTransport *trans; GF_X_Attribute *att; if (!com) return; //free all headers COM_FREE_CLEAN(Accept); COM_FREE_CLEAN(Accept_Encoding); COM_FREE_CLEAN(Accept_Language); COM_FREE_CLEAN(Authorization); COM_FREE_CLEAN(Cache_Control); COM_FREE_CLEAN(Conference); COM_FREE_CLEAN(Connection); COM_FREE_CLEAN(From); COM_FREE_CLEAN(Proxy_Authorization); COM_FREE_CLEAN(Proxy_Require); COM_FREE_CLEAN(Referer); COM_FREE_CLEAN(Session); COM_FREE_CLEAN(User_Agent); COM_FREE_CLEAN(body); COM_FREE_CLEAN(service_name); COM_FREE_CLEAN(ControlString); COM_FREE_CLEAN(method); //this is for server only, set to OK by default com->StatusCode = NC_RTSP_OK; com->user_data = NULL; com->Bandwidth = com->Blocksize = com->Content_Length = com->CSeq = 0; com->Scale = com->Speed = 0.0; if (com->Range) gf_free(com->Range); com->Range = NULL; while (gf_list_count(com->Transports)) { trans = (GF_RTSPTransport *) gf_list_get(com->Transports, 0); gf_list_rem(com->Transports, 0); gf_rtsp_transport_del(trans); } while (gf_list_count(com->Xtensions)) { att = (GF_X_Attribute*)gf_list_get(com->Xtensions, 0); gf_list_rem(com->Xtensions, 0); gf_free(att->Name); gf_free(att->Value); gf_free(att); } }
GF_EXPORT void gf_rtsp_response_reset(GF_RTSPResponse *rsp) { GF_RTPInfo *inf; GF_RTSPTransport *trans; GF_X_Attribute *att; if (!rsp) return; //free all headers RSP_FREE_CLEAN(Accept); RSP_FREE_CLEAN(Accept_Encoding); RSP_FREE_CLEAN(Accept_Language); RSP_FREE_CLEAN(Allow); RSP_FREE_CLEAN(Authorization); RSP_FREE_CLEAN(Cache_Control); RSP_FREE_CLEAN(Conference); RSP_FREE_CLEAN(Connection); RSP_FREE_CLEAN(Content_Base); RSP_FREE_CLEAN(Content_Encoding); RSP_FREE_CLEAN(Content_Language); RSP_FREE_CLEAN(Content_Location); RSP_FREE_CLEAN(Content_Type); RSP_FREE_CLEAN(Date); RSP_FREE_CLEAN(Expires); RSP_FREE_CLEAN(From); RSP_FREE_CLEAN(Host); RSP_FREE_CLEAN(If_Match); RSP_FREE_CLEAN(If_Modified_Since); RSP_FREE_CLEAN(Last_Modified); RSP_FREE_CLEAN(Location); RSP_FREE_CLEAN(Proxy_Authenticate); RSP_FREE_CLEAN(Proxy_Require); RSP_FREE_CLEAN(Public); RSP_FREE_CLEAN(Referer); RSP_FREE_CLEAN(Require); RSP_FREE_CLEAN(Retry_After); RSP_FREE_CLEAN(Server); RSP_FREE_CLEAN(Session); RSP_FREE_CLEAN(Timestamp); RSP_FREE_CLEAN(Unsupported); RSP_FREE_CLEAN(User_Agent); RSP_FREE_CLEAN(Vary); RSP_FREE_CLEAN(Via); RSP_FREE_CLEAN(WWW_Authenticate); //this is for us RSP_FREE_CLEAN(ResponseInfo); RSP_FREE_CLEAN(body); rsp->Bandwidth = rsp->Blocksize = rsp->ResponseCode = rsp->Content_Length = rsp->CSeq = 0; rsp->Scale = rsp->Speed = 0.0; if (rsp->Range) gf_free(rsp->Range); rsp->Range = NULL; rsp->SessionTimeOut = 0; while (gf_list_count(rsp->Transports)) { trans = (GF_RTSPTransport*) gf_list_get(rsp->Transports, 0); gf_list_rem(rsp->Transports, 0); gf_rtsp_transport_del(trans); } while (gf_list_count(rsp->RTP_Infos)) { inf = (GF_RTPInfo*) gf_list_get(rsp->RTP_Infos, 0); gf_list_rem(rsp->RTP_Infos, 0); if (inf->url) gf_free(inf->url); gf_free(inf); } while (gf_list_count(rsp->Xtensions)) { att = (GF_X_Attribute*)gf_list_get(rsp->Xtensions, 0); gf_list_rem(rsp->Xtensions, 0); gf_free(att->Name); gf_free(att->Value); gf_free(att); } }