shithub: opus-tools

Download patch

ref: 8d9f9e8c58a7ee75f49e92df1ebd8e5b2ef2f5e3
parent: bcafdc2bb6e17f5d2eda26f54f2bd04cb77362a4
author: Ralph Giles <giles@mozilla.com>
date: Fri Aug 31 19:56:24 EDT 2012

Add basic option parsing to opusrtp and a manpage.

So far opusrtp only has the --sniff function, but we
now require --sniff to activate it, and add --help,
--version and a manpage to document what does and
doesn't work.

--- /dev/null
+++ b/man/opusrtp.1
@@ -1,0 +1,56 @@
+.\" Process this file with
+.\" groff -man -Tascii opusrtp.1
+.\"
+.TH opusrtp 1 2012-08-31 "Xiph.Org Foundation" "opus-tools"
+
+.SH NAME
+opusrtp \- encapsulate Opus audio in RTP
+
+.SH SYNOPSIS
+.B opusrtp
+[
+.B -hV
+]
+[
+.B --sniff
+]
+
+.SH DESCRIPTION
+
+.B opusrtp
+Demonstration tool for sending and receiving Opus audio data in RTP,
+used for interactive applications on the internet.
+
+Currently the
+.B --sniff
+mode is all that's implemented.
+
+.SH "OPTIONS"
+.IP "-h, --help"
+Print help message
+.IP "-V, --version"
+Display version information
+.IP "--quiet"
+Suppresses program output
+.IP "--sniff"
+Sniff the network for active RTP sessions and save them to .opus
+files. This can be useful for debugging other Opus RTP implementations.
+For this function to work, the program must be run with superuser
+privileges.
+
+.SH AUTHORS
+.br
+Ralph Giles <giles@thaumas.net>
+
+.SH BUGS
+
+Only the sniff mode is implemented; the tool should do normal unicast
+and multicast send/receive.
+
+The sniff mode should allow specifying device/host/port/payload type
+to limit capture. All that is hard-coded.
+
+.SH SEE ALSO
+.BR opusdec (1),
+.BR opusenc (1),
+.BR opusinfo (1)
--- a/src/opusrtp.c
+++ b/src/opusrtp.c
@@ -39,6 +39,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+#include <getopt.h>
 
 #ifdef HAVE_PCAP
 #include <pcap.h>
@@ -518,11 +520,64 @@
 }
 #endif /* HAVE_PCAP */
 
+void opustools_version(void)
+{
+  printf("opusrtp %s %s\n", PACKAGE, VERSION);
+  printf("Copyright (C) 2012 Xiph.Org Foundation\n");
+}
+
+void usage(char *exe)
+{
+  printf("Usage: %s [--sniff]\n", exe);
+  printf("\n");
+  printf("Receives Opus audio RTP streams.\n");
+  printf("\nGeneral Options:\n");
+  printf(" -h, --help           This help\n");
+  printf(" -V, --version        Version information\n");
+  printf(" -q, --quiet          Suppress status output\n");
+  printf(" --sniff              Sniff and record Opus RTP streams\n");
+}
+
 int main(int argc, char *argv[])
 {
+  int option, i;
+  struct option long_options[] = {
+    {"help", no_argument, NULL, 'h'},
+    {"version", no_argument, NULL, 'V'},
+    {"quiet", no_argument, NULL, 'q'},
+    {"sniff", no_argument, NULL, 0},
+    {0, 0, 0, 0}
+  };
+
+  /* process command line arguments */
+  while ((option = getopt_long(argc, argv, "hVq", long_options, &i)) != -1) {
+    switch (option) {
+      case 0:
+        if (!strcmp(long_options[i].name, "sniff")) {
 #ifdef HAVE_PCAP
-  sniff("lo");
+          sniff("lo");
+#else
+          fprintf(stderr, "pcap support disabled, sorry.\n");
 #endif
+        } else {
+          fprintf(stderr, "Unknown option - try %s --help.\n", argv[0]);
+          return -1;
+        }
+        break;
+      case 'V':
+        opustools_version();
+        return 0;
+      case 'q':
+        break;
+      case 'h':
+        usage(argv[0]);
+        return 0;
+      case '?':
+      default:
+        usage(argv[0]);
+        return 1;
+    }
+  }
 
   return 0;
 }