summaryrefslogtreecommitdiff
path: root/anyrtpproxy/anyrtpproxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'anyrtpproxy/anyrtpproxy.cpp')
-rw-r--r--anyrtpproxy/anyrtpproxy.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/anyrtpproxy/anyrtpproxy.cpp b/anyrtpproxy/anyrtpproxy.cpp
new file mode 100644
index 0000000..b5998e2
--- /dev/null
+++ b/anyrtpproxy/anyrtpproxy.cpp
@@ -0,0 +1,133 @@
+#include <iostream>
+
+#include "../datatypes.h"
+
+#include "../log.h"
+#include "../signalController.h"
+#include "../PracticalSocket.h"
+#include "../buffer.h"
+
+#include "options.h"
+
+#define MAX_PACKET_SIZE 1500
+
+void* worker(void* dont_use_me)
+{
+ try
+ {
+
+ UDPSocket sock("127.0.0.1", 22222);
+ Buffer buf(u_int32_t(MAX_PACKET_SIZE));
+
+ while(1) {
+ string remote_host;
+ u_int16_t remote_port;
+
+ buf.setLength(MAX_PACKET_SIZE);
+ u_int32_t len = sock.recvFrom(buf.getBuf(), buf.getLength(), remote_host, remote_port);
+ buf.setLength(len);
+
+ std::cout << "Received UDP Packet from: " << remote_host << ":" << remote_port << std::endl;
+ std::cout << buf.getHexDump() << std::endl;
+
+// sendTo(buf, len, addr, port);
+ }
+ }
+ catch(std::exception &e)
+ {
+ std::cout << "an error happend: " << e.what() << std::endl;
+ }
+ pthread_exit(NULL);
+}
+
+
+
+
+
+// void chrootAndDrop(string const& chrootdir, string const& username)
+// {
+// if (getuid() != 0)
+// {
+// std::cerr << "this programm has to be run as root in order to run in a chroot" << std::endl;
+// exit(-1);
+// }
+
+// struct passwd *pw = getpwnam(username.c_str());
+// if(pw) {
+// if(chroot(chrootdir.c_str()))
+// {
+// std::cerr << "can't chroot to " << chrootdir << std::endl;
+// exit(-1);
+// }
+// std::cout << "we are in chroot jail (" << chrootdir << ") now" << std::endl;
+// chdir("/");
+// if (initgroups(pw->pw_name, pw->pw_gid) || setgid(pw->pw_gid) || setuid(pw->pw_uid))
+// {
+// std::cerr << "can't drop to user " << username << " " << pw->pw_uid << ":" << pw->pw_gid << std::endl;
+// exit(-1);
+// }
+// std::cout << "dropped user to " << username << " " << pw->pw_uid << ":" << pw->pw_gid << std::endl;
+// }
+// else
+// {
+// std::cerr << "unknown user " << username << std::endl;
+// exit(-1);
+// }
+// }
+
+// void daemonize()
+// {
+// pid_t pid;
+
+// pid = fork();
+// if(pid) exit(0);
+// setsid();
+// pid = fork();
+// if(pid) exit(0);
+
+// std::cout << "running in background now..." << std::endl;
+
+// int fd;
+// for (fd=getdtablesize();fd>=0;--fd) // close all file descriptors
+// close(fd);
+// fd=open("/dev/null",O_RDWR); // stdin
+// dup(fd); // stdout
+// dup(fd); // stderr
+// umask(027);
+// }
+
+
+int main(int argc, char* argv[])
+{
+ std::cout << "anyrtpproxy" << std::endl;
+ if(!gOpt.parse(argc, argv))
+ {
+ gOpt.printUsage();
+ exit(-1);
+ }
+
+// if(gOpt.chroot)
+// chrootAndDrop(gOpt.getChrootDir, gOpt.getUsername);
+// if(testSetPid(gOpt.pidFilename))
+// {
+// std::cout << "exiting..." << std::endl;
+// return -1;
+// }
+// if(gOpt.daemonize)
+// daemonize(gOpt.pidFilename);
+
+
+ cLog.msg(Log::PRIO_NOTICE) << "anyrtpproxy started...";
+
+ SignalController sig;
+ sig.init();
+
+ pthread_t workerThread;
+ pthread_create(&workerThread, NULL, worker, NULL);
+ pthread_detach(workerThread);
+
+ int ret = sig.run();
+
+ return ret;
+}
+