Mercurial > hg > beaglert
changeset 336:6599a9978ac4 prerelease
Refactored UdpClient, changed line endings to Unix
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Sun, 05 Jun 2016 20:22:55 +0100 |
parents | f14dc4ac8955 |
children | 5e2780bfbfed |
files | core/UdpClient.cpp include/UdpClient.h |
diffstat | 2 files changed, 89 insertions(+), 81 deletions(-) [+] |
line wrap: on
line diff
--- a/core/UdpClient.cpp Sun Jun 05 02:36:54 2016 +0100 +++ b/core/UdpClient.cpp Sun Jun 05 20:22:55 2016 +0100 @@ -1,79 +1,86 @@ -/* - * udpClient.cpp - * - * Created on: 19 May 2015 - * Author: giulio moro - */ -#include "UdpClient.h" - - UdpClient::UdpClient(){ - outSocket=socket(AF_INET, SOCK_DGRAM, 0); - int broadcastEnable = 1; - int ret = setsockopt(outSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)); - isSetPort=false; - isSetServer=false; - enabled=false; - } - UdpClient::UdpClient(int aPort, const char* aServerName){ - outSocket=socket(AF_INET, SOCK_DGRAM, 0); - if(outSocket<0){ - enabled=false; - return; - } - setPort(aPort); - setServer(aServerName); - isSetPort=true; - isSetServer=true; - enabled=true; - memset(&stTimeOut, 0, sizeof(struct timeval)); - } - UdpClient::~UdpClient(){ - close(outSocket); - } - void UdpClient::setPort(int aPort){ - port=aPort; - destinationServer.sin_port = htons(port); - destinationServer.sin_family = AF_INET; - isSetPort=true; - if(isSetServer){ - enabled=true; - } - }; - void UdpClient::setServer(const char* aServerName){ - inet_pton(AF_INET,aServerName,&destinationServer.sin_addr); - isSetServer=true; - if(isSetPort){ - enabled=true; - } - }; - int UdpClient::send(void * message, int size){ - if(!enabled) - return -1; - unsigned int length; - length=sizeof(struct sockaddr_in); - int n=sendto(outSocket,message,size,0,(const struct sockaddr *)&destinationServer,length); - if (n < 0){ - return n; - } - return 1; - }; - int UdpClient::write(const char* remoteHostname, int remotePortNumber, void* sourceBuffer, int numBytesToWrite){ - setServer(remoteHostname); - setPort(remotePortNumber); - return send(sourceBuffer, numBytesToWrite); - } - int UdpClient::waitUntilReady(bool readyForReading, int timeoutMsecs){ -// If the socket is ready on return, this returns 1. If it times-out before the socket becomes ready, it returns 0. If an error occurs, it returns -1. - if(enabled==false) - return -1; - if(timeoutMsecs<0) - return select(outSocket+1, NULL, &stWriteFDS, NULL, NULL); //calling this with a NULL timeout will block indefinitely - FD_ZERO(&stWriteFDS); - FD_SET(outSocket, &stWriteFDS); - float timeOutSecs=timeoutMsecs*0.001; - stTimeOut.tv_sec=(int)timeOutSecs; - timeOutSecs-=(int)timeOutSecs; - stTimeOut.tv_usec=(int)(timeOutSecs*1000000); - int descriptorReady= select(outSocket+1, NULL, &stWriteFDS, NULL, &stTimeOut); - return descriptorReady>0? 1 : descriptorReady; - } +/* + * udpClient.cpp + * + * Created on: 19 May 2015 + * Author: giulio moro + */ +#include <UdpClient.h> + + UdpClient::UdpClient(){ + outSocket=socket(AF_INET, SOCK_DGRAM, 0); + setSocketBroadcast(1); + isSetPort=false; + isSetServer=false; + enabled=false; + } + UdpClient::UdpClient(int aPort, const char* aServerName){ + outSocket=socket(AF_INET, SOCK_DGRAM, 0); + if(outSocket<0){ + enabled=false; + return; + } + setSocketBroadcast(1); + setPort(aPort); + setServer(aServerName); + isSetPort=true; + isSetServer=true; + enabled=true; + memset(&stTimeOut, 0, sizeof(struct timeval)); + } + UdpClient::~UdpClient(){ + close(outSocket); + } + void UdpClient::setPort(int aPort){ + port=aPort; + destinationServer.sin_port = htons(port); + destinationServer.sin_family = AF_INET; + isSetPort=true; + if(isSetServer){ + enabled=true; + } + }; + void UdpClient::setServer(const char* aServerName){ + inet_pton(AF_INET,aServerName,&destinationServer.sin_addr); + isSetServer=true; + if(isSetPort){ + enabled=true; + } + }; + int UdpClient::send(void * message, int size){ + if(!enabled) + return -1; + unsigned int length; + length=sizeof(struct sockaddr_in); + int n=sendto(outSocket,message,size,0,(const struct sockaddr *)&destinationServer,length); + if (n < 0){ + return n; + } + return 1; + }; + int UdpClient::write(const char* remoteHostname, int remotePortNumber, void* sourceBuffer, int numBytesToWrite){ + setServer(remoteHostname); + setPort(remotePortNumber); + return send(sourceBuffer, numBytesToWrite); + } + int UdpClient::waitUntilReady(bool readyForReading, int timeoutMsecs){ +// If the socket is ready on return, this returns 1. If it times-out before the socket becomes ready, it returns 0. If an error occurs, it returns -1. + if(enabled==false) + return -1; + if(timeoutMsecs<0) + return select(outSocket+1, NULL, &stWriteFDS, NULL, NULL); //calling this with a NULL timeout will block indefinitely + FD_ZERO(&stWriteFDS); + FD_SET(outSocket, &stWriteFDS); + float timeOutSecs=timeoutMsecs*0.001; + stTimeOut.tv_sec=(int)timeOutSecs; + timeOutSecs-=(int)timeOutSecs; + stTimeOut.tv_usec=(int)(timeOutSecs*1000000); + int descriptorReady= select(outSocket+1, NULL, &stWriteFDS, NULL, &stTimeOut); + return descriptorReady>0? 1 : descriptorReady; + } + int UdpClient::setSocketBroadcast(int broadcastEnable){ + int ret = setsockopt(outSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)); + if(ret < 0){ + printf("Impossible to set the socket to Broadcast\n"); + } + return ret; + }
--- a/include/UdpClient.h Sun Jun 05 02:36:54 2016 +0100 +++ b/include/UdpClient.h Sun Jun 05 20:22:55 2016 +0100 @@ -24,7 +24,7 @@ int enabled; int outSocket; struct timeval stTimeOut; - fd_set stWriteFDS; + fd_set stWriteFDS; bool isSetPort; bool isSetServer; struct sockaddr_in destinationServer; @@ -36,7 +36,8 @@ void setServer(const char* aServerName); int send(void* message, int size); int write(const char* remoteHostname, int remotePortNumber, void* sourceBuffer, int numBytesToWrite); - int waitUntilReady(bool readyForReading, int timeoutMsecs); + int waitUntilReady(bool readyForReading, int timeoutMsecs); + int setSocketBroadcast(int broadcastEnable); };