From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 66FD840AF6 for ; Tue, 5 Apr 2022 21:01:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DB00668B1F4; Wed, 6 Apr 2022 00:01:13 +0300 (EEST) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D935680292 for ; Wed, 6 Apr 2022 00:01:07 +0300 (EEST) Received: from localhost (213-47-68-29.cable.dynamic.surfer.at [213.47.68.29]) (Authenticated sender: michael@niedermayer.cc) by mail.gandi.net (Postfix) with ESMTPSA id 7ECAA1C0005 for ; Tue, 5 Apr 2022 21:01:06 +0000 (UTC) Date: Tue, 5 Apr 2022 23:01:05 +0200 From: Michael Niedermayer To: FFmpeg development discussions and patches Message-ID: <20220405210105.GY2829255@pb2> References: <20220403223825.26764-1-markg85@gmail.com> <20220403223825.26764-2-markg85@gmail.com> MIME-Version: 1.0 In-Reply-To: <20220403223825.26764-2-markg85@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH v12 1/1] avformat: Add IPFS protocol support. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: multipart/mixed; boundary="===============2448042482550117972==" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --===============2448042482550117972== Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="KYK8iVoHp7Ec4AVf" Content-Disposition: inline --KYK8iVoHp7Ec4AVf Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Apr 04, 2022 at 12:38:25AM +0200, Mark Gaiser wrote: > This patch adds support for: > - ffplay ipfs:// > - ffplay ipns:// >=20 > IPFS data can be played from so called "ipfs gateways". > A gateway is essentially a webserver that gives access to the > distributed IPFS network. >=20 > This protocol support (ipfs and ipns) therefore translates > ipfs:// and ipns:// to a http:// url. This resulting url is > then handled by the http protocol. It could also be https > depending on the gateway provided. >=20 > To use this protocol, a gateway must be provided. > If you do nothing it will try to find it in your > $HOME/.ipfs/gateway file. The ways to set it manually are: > 1. Define a -gateway to the gateway. > 2. Define $IPFS_GATEWAY with the full http link to the gateway. > 3. Define $IPFS_PATH and point it to the IPFS data path. > 4. Have IPFS running in your local user folder (under $HOME/.ipfs). >=20 [...] > + goto err; > + } > + > + // Read a single line (fgets stops at new line mark). > + if (!fgets(c->gateway_buffer, sizeof(c->gateway_buffer) - 1, gateway= _file)) { > + av_log(h, AV_LOG_WARNING, "Unable to read from file (full uri: %s)= =2E\n", > + ipfs_gateway_file); > + ret =3D AVERROR(ENOENT); > + goto err; > + } The indention is not consistent [...] > + // Populate c->gateway_buffer with whatever is in c->gateway > + if (c->gateway !=3D NULL) { > + if (snprintf(c->gateway_buffer, sizeof(c->gateway_buffer), "%s", > + c->gateway) >=3D sizeof(c->gateway_buffer)) { > + av_log(h, AV_LOG_WARNING, "The -gateway parameter is too lon= g. " > + "We allow a max of %zu characters\= n", > + sizeof(c->gateway_buffer)); > + ret =3D AVERROR(EINVAL); > + goto err; > + } > + } else { > + // Populate the IPFS gateway if we have any. > + // If not, inform the user how to properly set one. > + ret =3D populate_ipfs_gateway(h); > + > + if (ret < 1) { > + // We fallback on dweb.link (managed by Protocol Labs). > + snprintf(c->gateway_buffer, sizeof(c->gateway_buffer), "http= s://dweb.link"); > + > + av_log(h, AV_LOG_WARNING, "IPFS does not appear to be runnin= g. " > + "You=E2=80=99re now using the publ= ic gateway at dweb.link.\n"); > + av_log(h, AV_LOG_INFO, "Installing IPFS locally is recommend= ed to " > + "improve performance and reliability,= " > + "and not share all your activity with= a single IPFS gateway.\n" > + "There are multiple options to define this gateway.\n" > + "1. Call ffmpeg with a gateway param, " > + "without a trailing slash: -gateway <= url>.\n" > + "2. Define an $IPFS_GATEWAY environment variable with= the " > + "full HTTP URL to the gateway " > + "without trailing forward slash.\n" > + "3. Define an $IPFS_PATH environment variable " > + "and point it to the IPFS data path " > + "- this is typically ~/.ipfs\n"); > + } > + } This will print the warning every time a ipfs url is opened. Not just once is that intended ? > + > + // Test if the gateway starts with either http:// or https:// > + if (av_stristart(c->gateway_buffer, "http://", NULL) =3D=3D 0 > + && av_stristart(c->gateway_buffer, "https://", NULL) =3D=3D 0) { > + av_log(h, AV_LOG_WARNING, "The gateway URL didn't start with htt= p:// or " > + "https:// and is therefore invalid.\n"= ); > + ret =3D AVERROR(EILSEQ); > + goto err; > + } > + > + // Concatenate the url. > + // This ends up with something like: http://localhost:8080/ipfs/Qm..= =2E.. > + // The format of "%s%s%s%s" is the following: > + // 1st %s =3D The gateway. > + // 2nd %s =3D If the gateway didn't end in a slash, add a "/". Other= wise it's an empty string > + // 3rd %s =3D Either ipns/ or ipfs/. > + // 4th %s =3D The IPFS CID (Qm..., bafy..., ...). > + fulluri =3D av_asprintf("%s%s%s%s", > + c->gateway_buffer, > + (c->gateway_buffer[strlen(c->gateway_buffer) -= 1] =3D=3D '/') ? "" : "/", > + (is_ipns) ? "ipns/" : "ipfs/", > + ipfs_cid); > + > + if (!fulluri) { > + av_log(h, AV_LOG_ERROR, "Failed to compose the URL\n"); > + ret =3D AVERROR(ENOMEM); > + goto err; > + } another indention case Theres also some trailing whitespace in the patch left No more comments from me. LGTM after these to me i think thx [...] --=20 Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. -- Gandalf --KYK8iVoHp7Ec4AVf Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iF0EABEIAB0WIQSf8hKLFH72cwut8TNhHseHBAsPqwUCYkyuDgAKCRBhHseHBAsP q8VlAJ4kSbEq14IpcVeFgBl9kgn84nqQ8ACggeTy0+oz3YDmuOBc3DIzSTerxUI= =ikV1 -----END PGP SIGNATURE----- --KYK8iVoHp7Ec4AVf-- --===============2448042482550117972== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --===============2448042482550117972==--