From patchwork Fri Dec 7 14:01:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Grzeca X-Patchwork-Id: 11332 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 9AE9D44DD83 for ; Fri, 7 Dec 2018 16:01:10 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DFE5F68A90C; Fri, 7 Dec 2018 16:01:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-oln040092069073.outbound.protection.outlook.com [40.92.69.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3578568A907 for ; Fri, 7 Dec 2018 16:00:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oslItKToj0DZaZOY+yZeTz8N9oSXfloovO0rBda5ITg=; b=Jl4ofVMEoZ8sgVG+sGRGLI4P+7zuqrXX9rzGbhg1ONxjp3Ibhh3DO4Vkhi47HHIa1MbbsCIXF5IjuY+rDmPR0wwE813Q1xLWIdevR6hCcjuQ/ZbnDCBFq0fv3keo9QJbmNBJgVy1TG1sEpa2MadPTBhGNwQjZ5cQyrBuVQXUlIoUwNWqLMi4C5JyS78BEvMYzHYfPYR4btViahVXvKxgnAG5B7HOFDZpgjDHP+4supNEPdW4So+xJS6FXN0WJRIWBDC8dqDCl72CfofF3VdM6gX6ApQ3ac+EhYNYnAhDTLDPw97Cpzwlyx7GNNeKDDqh2gycX/W3t0Amx5KMs1HZeg== Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (10.152.12.53) by VE1EUR02HT070.eop-EUR02.prod.protection.outlook.com (10.152.13.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1404.13; Fri, 7 Dec 2018 14:01:04 +0000 Received: from DB8PR09MB2969.eurprd09.prod.outlook.com (10.152.12.54) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1404.13 via Frontend Transport; Fri, 7 Dec 2018 14:01:04 +0000 Received: from DB8PR09MB2969.eurprd09.prod.outlook.com ([fe80::ecb9:5996:7957:dca]) by DB8PR09MB2969.eurprd09.prod.outlook.com ([fe80::ecb9:5996:7957:dca%3]) with mapi id 15.20.1404.021; Fri, 7 Dec 2018 14:01:03 +0000 From: Adrian Grzeca To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libstr.c: Fixed rendezvous mode Thread-Index: AQHUjjVKnpqC0zBVcEmucHAGWmDmRg== Date: Fri, 7 Dec 2018 14:01:03 +0000 Message-ID: Accept-Language: pl-PL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR07CA0151.eurprd07.prod.outlook.com (2603:10a6:802:16::38) To DB8PR09MB2969.eurprd09.prod.outlook.com (2603:10a6:10:b1::22) x-incomingtopheadermarker: OriginalChecksum:59793F95C50FD65622C7FDDC3B480EE2103B2826F00570824D60EC309F79FC93; UpperCasedChecksum:45B76EBA585C3A295F196431DB4399632EC2BE714CB4B429C1A106E89E9B1924; SizeAsReceived:7252; Count:47 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [MWUjb3/sukcix88z3M6qpjAplq3SQM0I] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VE1EUR02HT070; 6:Z5kjCtBdETRSEWpf6jdX0Bjmc/yuT4jp0FxI/EnPhUalzKhb0Wo/jTpF+nFiVdh1iZGVITTkAkzd8hyd76ryWsr92rfPnrnjLRrdWcqZ75/Lj0FRXhBuHJPUFRpH9WpmrTk9xjmZ8CwYmFId9clQ8oPpOgHyJ2fujrP6XOztjQ1L2OEVq1N7cRVql10e4XxSiPYwiUUxB+b+gOziR9A8eZoALcxlIUmZ2cR2PkenzswS5tj4p8GOsMv8MQaNlGK/Gnf+N3nPL0sVMkKXcWslDK0Ub3dNTbCe4gRBJS1d0MZcGmIt78Vs4UPD/YyvGN8rJpXPspouQzNFwHJc/Ty/6JUx9I5P9E8m3Tsf4AyvEl6US03b92zH5BwYFi+P3q/r8DB58Vvz8ywT/q32QxTt5DMONkLGmwTI8MNx095emy0ozResLqqc+wjGMHKvVw05qMTzA+iq/tGOx1BTxUEC9A==; 5:ELi24oLPodMJgTARuZzwcenmHTmY3CR+92nQGHmElE+vu6O3HKbwmo5zvTaUhvI9mDdRwuxMRU5gXGGJ70vSWpHGgILK+sIo/cvPFtKQgc5816lgB2w0JQ08fvZSmL+bjIWp9qoUEo0cQlte6iXZqHVwpU5Z091FC4P4Iy1OK/8=; 7:4sqFG3NkcPKjbQl9oNiXUZaPyv6A8m7VMZrx/08PSPS5DNCUPVrebTEkoGUvCKhAfI8Vx3kk4j6qTkZgEZy6ItsXo1ovMSkRIbWjDqyygEI4tKfh1PQhrz10i8XfUWKejNkVzNupL2Vm9n3DVKLRNw== x-incomingheadercount: 47 x-eopattributedmessage: 0 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(1603101475)(1601125500)(1701031045); SRVR:VE1EUR02HT070; x-ms-traffictypediagnostic: VE1EUR02HT070: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(4566010)(82015058); SRVR:VE1EUR02HT070; BCL:0; PCL:0; RULEID:; SRVR:VE1EUR02HT070; x-microsoft-antispam-message-info: LImjlbUVRocekY4hFkOt16r54NVpHMRT3ewFL63+vPa6VRI1OlPJiQpWveR9ACbI MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: f12efbb0-867f-4c93-8261-502eceebfafa X-MS-Exchange-CrossTenant-Network-Message-Id: 6906e6e6-fa70-485c-7268-08d65c4c6cf7 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: f12efbb0-867f-4c93-8261-502eceebfafa X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Dec 2018 14:01:03.8882 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1EUR02HT070 Subject: [FFmpeg-devel] [PATCH] libstr.c: Fixed rendezvous mode X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/libsrt.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index fe3b312151..fced18fb92 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -84,6 +84,8 @@ typedef struct SRTContext { char *smoother; int messageapi; SRT_TRANSTYPE transtype; + char *localip; + char *localport; } SRTContext; #define D AV_OPT_FLAG_DECODING_PARAM @@ -128,6 +130,8 @@ static const AVOption libsrt_options[] = { { "transtype", "The transmission type for the socket", OFFSET(transtype), AV_OPT_TYPE_INT, { .i64 = SRTT_INVALID }, SRTT_LIVE, SRTT_INVALID, .flags = D|E, "transtype" }, { "live", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = SRTT_LIVE }, INT_MIN, INT_MAX, .flags = D|E, "transtype" }, { "file", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = SRTT_FILE }, INT_MIN, INT_MAX, .flags = D|E, "transtype" }, + { "localip", "IP address of network card to use in rendezvous mode (Req. in rendezvous mode)", OFFSET(localip), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, + { "localport", "Source port to use in rendezvous mode (Req. in rendezvous mode)", OFFSET(localport), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, { NULL } }; @@ -355,6 +359,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) char portstr[10]; int open_timeout = 5000000; int eid; + struct sockaddr_in la; eid = srt_epoll_create(); if (eid < 0) @@ -395,7 +400,25 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) } cur_ai = ai; - + + //Fix for rendezvous mode. Not good only for IPv4 but working. + if (s->mode == SRT_MODE_RENDEZVOUS) { + if(s->localip == NULL || s->localport == NULL) { + av_log(h, AV_LOG_ERROR, "Invalid adapter configuration\n"); + return AVERROR(EIO); + } + av_log(h, AV_LOG_DEBUG , "Adapter options %s:%s\n", s->localip, s->localport); + + int lp = strtol(s->localport, NULL, 10); //TODO: What if localport do not contain numers + if (lp <= 0 || lp >= 65536) { + av_log(h, AV_LOG_ERROR, "Local port missing in uri\n"); + return AVERROR(EINVAL); + } + + la.sin_family = AF_INET; //TODO: Add support for IPv6 + la.sin_port = htons(port); + la.sin_addr.s_addr = inet_addr(s->localip); //TODO: Check if localip is IP of local interface + } restart: fd = srt_socket(cur_ai->ai_family, cur_ai->ai_socktype, 0); @@ -423,7 +446,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) fd = ret; } else { if (s->mode == SRT_MODE_RENDEZVOUS) { - ret = srt_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen); + ret = srt_bind(fd, (struct sockaddr *)&la, sizeof(struct sockaddr_in)); if (ret) goto fail1; } @@ -579,6 +602,12 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) } else { return AVERROR(EINVAL); } + } + if (av_find_info_tag(buf, sizeof(buf), "localip", p)) { + s->localip = av_strndup(buf, strlen(buf)); + } + if (av_find_info_tag(buf, sizeof(buf), "localport", p)) { + s->localport = av_strndup(buf, strlen(buf)); } } return libsrt_setup(h, uri, flags);