SkillAgentSearch skills...

Udpxy

lightweight network-traffic relay daemon

Install / Use

/learn @pcherenkov/Udpxy
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Copyright 2008-2018 Pavel V. Cherenkov (pcherenkov@gmail.com)

This file is part of udpxy.

udpxy is free software: you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation, either version 3 of the License, or

(at your option) any later version.

udpxy is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with udpxy. If not, see http://www.gnu.org/licenses/.

Summary

udpxy is a UDP-to-HTTP multicast traffic relay daemon: it forwards UDP traffic from a given multicast subscription to the requesting HTTP client.

udpxy is released under GPL v.3

Project status

udpxy has not been extended or supported for 4+ years, having been replaced by Gigapxy - a superior enterprise-oriented product. Please see more info at http://gigapxy.com, thank you.

Building and installing

Untar the *.tgz source distribution into a directory of your choice by running tar -xzvf udpxy.X.Y-ZZ.tgz or gzip -dc udpxy.X.Y-ZZ.tgz | tar -xvf -

Make sure GNU make and gcc are available (gcc 3.x and up should work, lower versions are not guaranteed to build the source correctly); for compilers other than gcc alterations to Makefile might be needed.

Running 'make' without a target will build the 'release' version of udpxy (no asserts, no debug symbols, verbose mode on).

Other make targets are: debug (asserts, debug symbols, verbose mode on); lean (no asserts, no debug symbols, verbose mode off); rdebug (same as 'release' but with debug symbols); ldebug (same as 'lean' but with debug symbols);

Once the make has succeeded, the udpxy executable file could be copied to a location of one's choice and run from there - no additional installation steps are required.

udpxy can be started with a number of configuration parameters, such as listening address/port, multicast interface name, etc. A brief usage summary is provided when udpxy is invoked from command line without parameters.

HTTP commands

udpxy responds to HTTP (GET) commands to receive data from a dedicated multicast group and forward it to the initiating (HTTP) connection.

The command to relay traffic is in the format as below:

http://<address>:<port>/<cmd>/[src_address@]<mgroup_address><sep><mgroup_port>/

[SEP] ::= :|%|~|+|-|^ i.e: http://ip:port/cmd/mgroup_address:mgroup_port/ http://ip:port/cmd/mgroup_address%mgroup_port/ http://ip:port/cmd/mgroup_address~mgroup_port/ ...... http://ip:port/cmd/mgroup_address^mgroup_port/

are acceptable and should all work in the same manner.

cmd ::= udp | rtp

where ip and port match the listening address/port combination of udpxy, and [src_address@]mgroup_address:mgroup_port identify the multicast group (and optional source) to subscribe to.

Using 'udp' command will instruct udpxy to probe for known types of payload (such as MPEG-TS and RTP over MPEG-TS); using 'rtp' makes udpxy assume RTP over MPEG-TS payload, thus skipping the probes.

udpxy will start a 'client' process for each new relay request as long as their number would not exceed a pre-set maximum (see usage summary).

udpxy also supports a few additional HTTP requests, such as:

http://address:port/status/ - to display basic daemon's statistics http://address:port/restart/ - to close all active connections and restart

Payload types and handling

udpxy recognizes MPEG-TS and RTP (over MPEG-TS) payloads within relayed packets; if udpxy encounters RTP payload it automatically 'translates' it to MPEG-TS so that media players not recognizing RTP on TCP could still play back the stream.

So far, no translation is performed for other payload types.

Recording MPEG traffic

udpxy (in builds >0.33) includes functionality to record captured traffic as raw MPEG-TS stream into a file. This functionality is enabled through udpxrec: a bundled-in application that is linked together with udpxy (as one executable).

udpxrec is invoked by a symbolic link (named udpxrec) to the udpxy executable (NB: do not rename udpxy executable).

udpxrec creates MPEG files encapsulating MPEG-TS segments; most media players will NOT play such files; to make them playable the stream must be transcoded to MPEG-PS; vlc knows how to do such transcoding, here is a command-line example:

vlc input-ts.mpg --sout="#std{access=file,mux=ps,dst=out-ps.mpg}"

The resulting PS file can be played back by most media players.

Portability

udpxy was written to run on 'POSIX-compliant' systems; so far all builds have been tested to build and run on Linux 2.4, 2.6, 3.x (IA32, ARM) and some (but not all) on HP-UX 11.11 (PA-RISC 1.1, 2.0w).

Build 12 of version 1.0 (Chipmunk) was ported to compile under FreeBSD 7.1 using GNU make 3.8; later builds have been tested to compile under later versions of FreeBSD (up to 9.0);

Certain builds have been ported to build under cygwin; cygwin is NOT considered to be a fully supported platform yet there is an ongoing effort to make udpxy run on it as well.

Environment variables

udpxy utilizes the following environment variables to compliment its command-line options; the variables are considered for the options that most people would not need to change too often (or simply inconvenient to use from the command line).

NB: If there is a command-line switch that would intersect in functionality with an environment variable, the switch always has the higher priority.

UDPXY_RCV_TMOUT - timeout (sec) on the inbound data stream (multicast), default=5; UDPXY_DHOLD_TMOUT - timeout (sec) to hold buffered data before sending/flushing to client(s), default=1;

UDPXY_SREAD_TMOUT - timeout (sec) to read from the listening socked (handling HTTP requests), default=1; UDPXY_SWRITE_TMOUT - timeout (sec) to write to the listening socked (handling HTTP requests), default=1; UDPXY_SSEL_TMOUT - timeout (sec) to select(2) in server loop (unused if pselect(2) is employed), default=30; UDPXY_LQ_BACKLOG - size of the listener socket's backlog, default=16; UDPXY_SRV_RLWMARK - low watermaek on the receiving (m-cast) socket, default=0 (not set); UDPXY_SSOCKBUF_NOSYNC - do not sync inbound (UDP) socket's buffer size (with value set by -B), default=1 (sync); UDPXY_DSOCKBUF_NOSYNC - do not sync outbound (TCP) socket's buffer size (with value set by -B), default=1 (sync);

UDPXY_TCP_NODELAY - disable Nagle algorithm on the newly accepted socket (faster channel switching), default=1;

UDPXY_HTTP200_FTR_FILE - append contents of the given file to the HTTP 200 response, default=none; UDPXY_HTTP200_FTR_LN - append the text (line) to the HTTP 200 response, default=none;

UDPXY_ALLOW_PAUSES - if blocked on a write, keep reading data until the buffer (-B size) is full, default=disabled; UDPXY_PAUSE_MSEC - allow only N milliseconds of reading data when blocked on a write. UDPXY_CONTENT_TYPE - specify custom Content-Type in HTTP responses.

--EOF--

View on GitHub
GitHub Stars295
CategoryDevelopment
Updated10d ago
Forks125

Languages

C

Security Score

80/100

Audited on Mar 24, 2026

No findings