From a5b57010ee3ade84f58c211e78bb3d4ed5d5a3a6 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sun, 3 Mar 2013 09:54:55 +0000 Subject: added projects git-svn-id: http://svn.miranda-ng.org/main/trunk@3859 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/NotifyAnything/SendLog/src/SLImp.cpp | 84 ++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 plugins/NotifyAnything/SendLog/src/SLImp.cpp (limited to 'plugins/NotifyAnything/SendLog/src/SLImp.cpp') diff --git a/plugins/NotifyAnything/SendLog/src/SLImp.cpp b/plugins/NotifyAnything/SendLog/src/SLImp.cpp new file mode 100644 index 0000000000..3e9b38dd77 --- /dev/null +++ b/plugins/NotifyAnything/SendLog/src/SLImp.cpp @@ -0,0 +1,84 @@ +#include "Common.h" + +void implementation(int argc, char **argv, bool console) +{ + int port = 12001; + bool tcp = false; + const char *target = "127.0.0.1"; + + if (argc >= 2 && !strcmp("-T", argv[1])) { + tcp = true; + argc -= 1; + argv += 1; + } + + if (argc >= 3 && !strcmp("-H", argv[1])) { + target = argv[2]; + argc -= 2; + argv += 2; + } + + if (argc >= 3 && !strcmp("-P", argv[1])) { + port = atoi(argv[2]); + argc -= 2; + argv += 2; + } + + WSADATA wsaData; + int err = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (err) + throw (DWORD) err; + + char portbuf[10]; + sprintf(portbuf, "%i", port); + + ADDRINFO hints; + memset(&hints, 0, sizeof hints); + hints.ai_socktype = SOCK_DGRAM; + hints.ai_family = PF_INET; + ADDRINFO *res; + err = getaddrinfo(target, portbuf, &hints, &res); + + if (err || !res) + throw (DWORD) err; + + SOCKET sock; + SOCKADDR_IN to = *(SOCKADDR_IN*)res->ai_addr; + + sock = socket(AF_INET, tcp ? SOCK_STREAM : SOCK_DGRAM, tcp ? IPPROTO_TCP : IPPROTO_UDP); + if (sock == INVALID_SOCKET) + throw (DWORD) WSAGetLastError(); + + SOCKADDR_IN self; + ZeroMemory(&self, sizeof self); + self.sin_family = AF_INET; + + if (bind(sock, (const SOCKADDR *) &self, sizeof self)) + throw (DWORD) WSAGetLastError(); + + if (connect(sock, (const SOCKADDR *) &to, sizeof to)) + throw (DWORD) WSAGetLastError(); + + if (console && (argc == 1 || argc == 3 && !strcmp("-p", argv[1]))) { + std::string prefix; + if (argc == 3) + prefix = argv[2]; + std::string line; + while (std::getline(std::cin, line)) { + std::string data = prefix + line; + send(sock, data.data(), data.size(), 0); + } + } else { + std::string message = argv[1]; + for (int i=2; i