Lines Matching +full:socks +full:- +full:proxy +full:- +full:agent
21 * SPDX-License-Identifier: curl
51 /* protocol-specific functions set up to be called by the main engine */
58 struct connectdata *conn, curl_socket_t *socks);
85 curl_socket_t *socks) in rtsp_getsock_do() argument
89 socks[0] = conn->sock[FIRSTSOCKET]; in rtsp_getsock_do()
134 data->req.p.rtsp = rtsp = calloc(1, sizeof(struct RTSP)); in rtsp_setup_connection()
138 Curl_dyn_init(&conn->proto.rtspc.buf, MAX_RTP_BUFFERSIZE); in rtsp_setup_connection()
170 if(data->state.rtsp_next_client_CSeq == 0) in rtsp_connect()
171 data->state.rtsp_next_client_CSeq = 1; in rtsp_connect()
172 if(data->state.rtsp_next_server_CSeq == 0) in rtsp_connect()
173 data->state.rtsp_next_server_CSeq = 1; in rtsp_connect()
175 data->conn->proto.rtspc.rtp_channel = -1; in rtsp_connect()
185 Curl_dyn_free(&conn->proto.rtspc.buf); in rtsp_disconnect()
193 struct RTSP *rtsp = data->req.p.rtsp; in rtsp_done()
196 /* Bypass HTTP empty-reply checks on receive */ in rtsp_done()
197 if(data->set.rtspreq == RTSPREQ_RECEIVE) in rtsp_done()
204 long CSeq_sent = rtsp->CSeq_sent; in rtsp_done()
205 long CSeq_recv = rtsp->CSeq_recv; in rtsp_done()
206 if((data->set.rtspreq != RTSPREQ_RECEIVE) && (CSeq_sent != CSeq_recv)) { in rtsp_done()
212 if(data->set.rtspreq == RTSPREQ_RECEIVE && in rtsp_done()
213 (data->conn->proto.rtspc.rtp_channel == -1)) { in rtsp_done()
223 struct connectdata *conn = data->conn; in rtsp_do()
225 Curl_RtspReq rtspreq = data->set.rtspreq; in rtsp_do()
226 struct RTSP *rtsp = data->req.p.rtsp; in rtsp_do()
245 rtsp->CSeq_sent = data->state.rtsp_next_client_CSeq; in rtsp_do()
246 rtsp->CSeq_recv = 0; in rtsp_do()
251 if(!data->state.first_host) { in rtsp_do()
252 data->state.first_host = strdup(conn->host.name); in rtsp_do()
253 if(!data->state.first_host) in rtsp_do()
256 data->state.first_remote_port = conn->remote_port; in rtsp_do()
257 data->state.first_remote_protocol = conn->handler->protocol; in rtsp_do()
264 data->req.no_body = TRUE; /* most requests don't contain a body */ in rtsp_do()
274 data->req.no_body = FALSE; in rtsp_do()
294 data->req.no_body = FALSE; in rtsp_do()
305 data->req.no_body = FALSE; in rtsp_do()
313 Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, -1); in rtsp_do()
317 p_session_id = data->set.str[STRING_RTSP_SESSION_ID]; in rtsp_do()
327 if(data->set.str[STRING_RTSP_STREAM_URI]) { in rtsp_do()
328 p_stream_uri = data->set.str[STRING_RTSP_STREAM_URI]; in rtsp_do()
338 if(data->set.str[STRING_RTSP_TRANSPORT]) { in rtsp_do()
339 Curl_safefree(data->state.aptr.rtsp_transport); in rtsp_do()
341 data->state.aptr.rtsp_transport = in rtsp_do()
343 data->set.str[STRING_RTSP_TRANSPORT]); in rtsp_do()
344 if(!data->state.aptr.rtsp_transport) in rtsp_do()
354 p_transport = data->state.aptr.rtsp_transport; in rtsp_do()
363 /* Accept-Encoding header */ in rtsp_do()
364 if(!Curl_checkheaders(data, STRCONST("Accept-Encoding")) && in rtsp_do()
365 data->set.str[STRING_ENCODING]) { in rtsp_do()
366 Curl_safefree(data->state.aptr.accept_encoding); in rtsp_do()
367 data->state.aptr.accept_encoding = in rtsp_do()
368 aprintf("Accept-Encoding: %s\r\n", data->set.str[STRING_ENCODING]); in rtsp_do()
370 if(!data->state.aptr.accept_encoding) { in rtsp_do()
374 p_accept_encoding = data->state.aptr.accept_encoding; in rtsp_do()
378 /* The User-Agent string might have been allocated in url.c already, because in rtsp_do()
379 it might have been used in the proxy connect, but if we have got a header in rtsp_do()
380 with the user-agent string specified, we erase the previously made string in rtsp_do()
382 if(Curl_checkheaders(data, STRCONST("User-Agent")) && in rtsp_do()
383 data->state.aptr.uagent) { in rtsp_do()
384 Curl_safefree(data->state.aptr.uagent); in rtsp_do()
386 else if(!Curl_checkheaders(data, STRCONST("User-Agent")) && in rtsp_do()
387 data->set.str[STRING_USERAGENT]) { in rtsp_do()
388 p_uagent = data->state.aptr.uagent; in rtsp_do()
398 p_proxyuserpwd = data->state.aptr.proxyuserpwd; in rtsp_do()
400 p_userpwd = data->state.aptr.userpwd; in rtsp_do()
403 Curl_safefree(data->state.aptr.ref); in rtsp_do()
404 if(data->state.referer && !Curl_checkheaders(data, STRCONST("Referer"))) in rtsp_do()
405 data->state.aptr.ref = aprintf("Referer: %s\r\n", data->state.referer); in rtsp_do()
407 p_referrer = data->state.aptr.ref; in rtsp_do()
415 if(data->state.use_range && in rtsp_do()
419 if(!Curl_checkheaders(data, STRCONST("Range")) && data->state.range) { in rtsp_do()
420 Curl_safefree(data->state.aptr.rangeline); in rtsp_do()
421 data->state.aptr.rangeline = aprintf("Range: %s\r\n", data->state.range); in rtsp_do()
422 p_range = data->state.aptr.rangeline; in rtsp_do()
442 "%s %s RTSP/1.0\r\n" /* Request Stream-URI RTSP/1.0 */ in rtsp_do()
444 p_request, p_stream_uri, rtsp->CSeq_sent); in rtsp_do()
459 * Shared HTTP-like options in rtsp_do()
464 "%s" /* accept-encoding */ in rtsp_do()
467 "%s" /* user-agent */ in rtsp_do()
481 * Free userpwd now --- cannot reuse this for Negotiate and possibly NTLM in rtsp_do()
484 Curl_safefree(data->state.aptr.userpwd); in rtsp_do()
504 if(data->state.upload) { in rtsp_do()
505 req_clen = data->state.infilesize; in rtsp_do()
506 data->state.httpreq = HTTPREQ_PUT; in rtsp_do()
512 if(data->set.postfields) { in rtsp_do()
513 size_t plen = strlen(data->set.postfields); in rtsp_do()
515 result = Curl_creader_set_buf(data, data->set.postfields, plen); in rtsp_do()
517 else if(data->state.infilesize >= 0) { in rtsp_do()
518 req_clen = data->state.infilesize; in rtsp_do()
531 * actually set a custom Content-Length in the headers */ in rtsp_do()
532 if(!Curl_checkheaders(data, STRCONST("Content-Length"))) { in rtsp_do()
535 "Content-Length: %" CURL_FORMAT_CURL_OFF_T"\r\n", in rtsp_do()
543 if(!Curl_checkheaders(data, STRCONST("Content-Type"))) { in rtsp_do()
545 STRCONST("Content-Type: " in rtsp_do()
553 if(!Curl_checkheaders(data, STRCONST("Content-Type"))) { in rtsp_do()
555 STRCONST("Content-Type: " in rtsp_do()
564 data->state.httpreq = HTTPREQ_HEAD; in rtsp_do()
565 data->req.no_body = TRUE; in rtsp_do()
579 Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, FIRSTSOCKET); in rtsp_do()
589 data->state.rtsp_next_client_CSeq++; in rtsp_do()
591 if(data->req.writebytecount) { in rtsp_do()
592 /* if a request-body has been sent off, we make sure this progress is in rtsp_do()
594 Curl_pgrsSetUploadCounter(data, data->req.writebytecount); in rtsp_do()
610 struct rtsp_conn *rtspc = &(data->conn->proto.rtspc); in rtp_write_body_junk()
614 in_body = (data->req.headerline && !rtspc->in_header) && in rtp_write_body_junk()
615 (data->req.size >= 0) && in rtp_write_body_junk()
616 (data->req.bytecount < data->req.size); in rtp_write_body_junk()
617 body_remain = in_body? (data->req.size - data->req.bytecount) : 0; in rtp_write_body_junk()
632 struct rtsp_conn *rtspc = &(data->conn->proto.rtspc); in rtsp_filter_rtp()
638 bool in_body = (data->req.headerline && !rtspc->in_header) && in rtsp_filter_rtp()
639 (data->req.size >= 0) && in rtsp_filter_rtp()
640 (data->req.bytecount < data->req.size); in rtsp_filter_rtp()
641 switch(rtspc->state) { in rtsp_filter_rtp()
644 DEBUGASSERT(Curl_dyn_len(&rtspc->buf) == 0); in rtsp_filter_rtp()
647 data->set.rtspreq != RTSPREQ_RECEIVE) { in rtsp_filter_rtp()
654 rtspc->state = RTP_PARSE_SKIP; in rtsp_filter_rtp()
655 rtspc->in_header = TRUE; in rtsp_filter_rtp()
662 --blen; in rtsp_filter_rtp()
670 (char *)(buf - skip_len), skip_len); in rtsp_filter_rtp()
675 if(Curl_dyn_addn(&rtspc->buf, buf, 1)) { in rtsp_filter_rtp()
681 --blen; in rtsp_filter_rtp()
682 rtspc->state = RTP_PARSE_CHANNEL; in rtsp_filter_rtp()
690 DEBUGASSERT(Curl_dyn_len(&rtspc->buf) == 1); in rtsp_filter_rtp()
691 if(!(data->state.rtp_channel_mask[idx] & (1 << off))) { in rtsp_filter_rtp()
693 rtspc->state = RTP_PARSE_SKIP; in rtsp_filter_rtp()
699 * it from an earlier call. We cannot un-consume it and have in rtsp_filter_rtp()
701 result = rtp_write_body_junk(data, Curl_dyn_ptr(&rtspc->buf), 1); in rtsp_filter_rtp()
709 Curl_dyn_free(&rtspc->buf); in rtsp_filter_rtp()
713 rtspc->rtp_channel = (unsigned char)buf[0]; in rtsp_filter_rtp()
714 if(Curl_dyn_addn(&rtspc->buf, buf, 1)) { in rtsp_filter_rtp()
720 --blen; in rtsp_filter_rtp()
721 rtspc->state = RTP_PARSE_LEN; in rtsp_filter_rtp()
726 size_t rtp_len = Curl_dyn_len(&rtspc->buf); in rtsp_filter_rtp()
729 if(Curl_dyn_addn(&rtspc->buf, buf, 1)) { in rtsp_filter_rtp()
735 --blen; in rtsp_filter_rtp()
738 rtp_buf = Curl_dyn_ptr(&rtspc->buf); in rtsp_filter_rtp()
739 rtspc->rtp_len = RTP_PKT_LENGTH(rtp_buf) + 4; in rtsp_filter_rtp()
740 rtspc->state = RTP_PARSE_DATA; in rtsp_filter_rtp()
745 size_t rtp_len = Curl_dyn_len(&rtspc->buf); in rtsp_filter_rtp()
747 DEBUGASSERT(rtp_len < rtspc->rtp_len); in rtsp_filter_rtp()
748 needed = rtspc->rtp_len - rtp_len; in rtsp_filter_rtp()
750 if(Curl_dyn_addn(&rtspc->buf, buf, needed)) { in rtsp_filter_rtp()
756 blen -= needed; in rtsp_filter_rtp()
759 rtspc->rtp_channel, rtspc->rtp_len)); in rtsp_filter_rtp()
760 result = rtp_client_write(data, Curl_dyn_ptr(&rtspc->buf), in rtsp_filter_rtp()
761 rtspc->rtp_len); in rtsp_filter_rtp()
762 Curl_dyn_free(&rtspc->buf); in rtsp_filter_rtp()
763 rtspc->state = RTP_PARSE_SKIP; in rtsp_filter_rtp()
768 if(Curl_dyn_addn(&rtspc->buf, buf, blen)) { in rtsp_filter_rtp()
786 result = rtp_write_body_junk(data, (char *)(buf - skip_len), skip_len); in rtsp_filter_rtp()
795 struct rtsp_conn *rtspc = &(data->conn->proto.rtspc); in rtsp_rtp_write_resp()
799 if(!data->req.header) in rtsp_rtp_write_resp()
800 rtspc->in_header = FALSE; in rtsp_rtp_write_resp()
806 blen, rtspc->in_header, is_eos)); in rtsp_rtp_write_resp()
809 if(!rtspc->in_header) { in rtsp_rtp_write_resp()
814 blen -= consumed; in rtsp_rtp_write_resp()
816 if(blen && !data->req.header) in rtsp_rtp_write_resp()
822 if(data->req.header && blen) { in rtsp_rtp_write_resp()
823 rtspc->in_header = TRUE; in rtsp_rtp_write_resp()
829 blen -= consumed; in rtsp_rtp_write_resp()
831 if(!data->req.header) in rtsp_rtp_write_resp()
832 rtspc->in_header = FALSE; in rtsp_rtp_write_resp()
834 if(!rtspc->in_header) { in rtsp_rtp_write_resp()
836 if(data->req.size <= -1) { in rtsp_rtp_write_resp()
837 /* Respect section 4.4 of rfc2326: If the Content-Length header is in rtsp_rtp_write_resp()
839 data->req.size = 0; in rtsp_rtp_write_resp()
840 data->req.download_done = TRUE; in rtsp_rtp_write_resp()
845 blen -= consumed; in rtsp_rtp_write_resp()
849 if(rtspc->state != RTP_PARSE_SKIP) in rtsp_rtp_write_resp()
850 data->req.done = FALSE; in rtsp_rtp_write_resp()
855 " rtspc->state=%d, req.size=%" CURL_FORMAT_CURL_OFF_T ")", in rtsp_rtp_write_resp()
856 blen, rtspc->in_header, data->req.done, rtspc->state, in rtsp_rtp_write_resp()
857 data->req.size)); in rtsp_rtp_write_resp()
865 if((data->set.rtspreq == RTSPREQ_RECEIVE) && in rtsp_rtp_write_resp()
866 (rtspc->state == RTP_PARSE_SKIP)) { in rtsp_rtp_write_resp()
870 data->req.download_done = TRUE; in rtsp_rtp_write_resp()
891 if(data->set.fwrite_rtp) { in rtp_client_write()
892 writeit = data->set.fwrite_rtp; in rtp_client_write()
893 user_ptr = data->set.rtp_out; in rtp_client_write()
896 writeit = data->set.fwrite_func; in rtp_client_write()
897 user_ptr = data->set.out; in rtp_client_write()
927 struct RTSP *rtsp = data->req.p.rtsp; in Curl_rtsp_parseheader()
928 rtsp->CSeq_recv = CSeq; /* mark the request */ in Curl_rtsp_parseheader()
929 data->state.rtsp_CSeq_recv = CSeq; /* update the handle */ in Curl_rtsp_parseheader()
940 /* Find the first non-space letter */ in Curl_rtsp_parseheader()
954 * gstreamer does url-encoded session ID's not covered by the standard. in Curl_rtsp_parseheader()
959 idlen = end - start; in Curl_rtsp_parseheader()
961 if(data->set.str[STRING_RTSP_SESSION_ID]) { in Curl_rtsp_parseheader()
964 if(strlen(data->set.str[STRING_RTSP_SESSION_ID]) != idlen || in Curl_rtsp_parseheader()
965 strncmp(start, data->set.str[STRING_RTSP_SESSION_ID], idlen)) { in Curl_rtsp_parseheader()
967 start, data->set.str[STRING_RTSP_SESSION_ID]); in Curl_rtsp_parseheader()
977 data->set.str[STRING_RTSP_SESSION_ID] = Curl_memdup0(start, idlen); in Curl_rtsp_parseheader()
978 if(!data->set.str[STRING_RTSP_SESSION_ID]) in Curl_rtsp_parseheader()
994 /* If we receive multiple Transport response-headers, the linterleaved in rtsp_parse_transport()
997 /* e.g.: ' RTP/AVP/TCP;unicast;interleaved=5-6' */ in rtsp_parse_transport()
1010 unsigned char *rtp_channel_mask = data->state.rtp_channel_mask; in rtsp_parse_transport()
1012 if(*endp == '-') { in rtsp_parse_transport()