Fork of NetServicesMin with some warnings removed

Dependencies:   lwip-sys lwip

Fork of NetServicesMin by Hendrik Lipka

Committer:
uci1
Date:
Tue Oct 30 05:20:56 2012 +0000
Revision:
2:9cc2c6e42ffd
Parent:
0:8b387bed54c2
Fix some code that gives warnings when compiling with gcc (forward declared enums and addresses of temporary objects).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 0:8b387bed54c2 1
hlipka 0:8b387bed54c2 2 /*
hlipka 0:8b387bed54c2 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
hlipka 0:8b387bed54c2 4
hlipka 0:8b387bed54c2 5 Permission is hereby granted, free of charge, to any person obtaining a copy
hlipka 0:8b387bed54c2 6 of this software and associated documentation files (the "Software"), to deal
hlipka 0:8b387bed54c2 7 in the Software without restriction, including without limitation the rights
hlipka 0:8b387bed54c2 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hlipka 0:8b387bed54c2 9 copies of the Software, and to permit persons to whom the Software is
hlipka 0:8b387bed54c2 10 furnished to do so, subject to the following conditions:
hlipka 0:8b387bed54c2 11
hlipka 0:8b387bed54c2 12 The above copyright notice and this permission notice shall be included in
hlipka 0:8b387bed54c2 13 all copies or substantial portions of the Software.
hlipka 0:8b387bed54c2 14
hlipka 0:8b387bed54c2 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hlipka 0:8b387bed54c2 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hlipka 0:8b387bed54c2 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hlipka 0:8b387bed54c2 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hlipka 0:8b387bed54c2 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hlipka 0:8b387bed54c2 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hlipka 0:8b387bed54c2 21 THE SOFTWARE.
hlipka 0:8b387bed54c2 22 */
hlipka 0:8b387bed54c2 23
hlipka 0:8b387bed54c2 24 /** \file
hlipka 0:8b387bed54c2 25 UDP Socket header file
hlipka 0:8b387bed54c2 26 */
hlipka 0:8b387bed54c2 27
hlipka 0:8b387bed54c2 28 #ifndef UDPSOCKET_H
hlipka 0:8b387bed54c2 29 #define UDPSOCKET_H
hlipka 0:8b387bed54c2 30
hlipka 0:8b387bed54c2 31 #include "core/net.h"
hlipka 0:8b387bed54c2 32 #include "core/host.h"
hlipka 0:8b387bed54c2 33 //Essentially it is a safe interface to NetUdpSocket
uci1 2:9cc2c6e42ffd 34 #include "if/net/netudpsocket.h"
hlipka 0:8b387bed54c2 35
hlipka 0:8b387bed54c2 36 ///UDP Socket error codes
hlipka 0:8b387bed54c2 37 enum UDPSocketErr
hlipka 0:8b387bed54c2 38 {
hlipka 0:8b387bed54c2 39 __UDPSOCKET_MIN = -0xFFFF,
hlipka 0:8b387bed54c2 40 UDPSOCKET_SETUP, ///<UDPSocket not properly configured
hlipka 0:8b387bed54c2 41 UDPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized
hlipka 0:8b387bed54c2 42 UDPSOCKET_MEM, ///<Not enough mem
hlipka 0:8b387bed54c2 43 UDPSOCKET_INUSE, ///<Interface / Port is in use
hlipka 0:8b387bed54c2 44 //...
hlipka 0:8b387bed54c2 45 UDPSOCKET_OK = 0 ///<Success
hlipka 0:8b387bed54c2 46 };
hlipka 0:8b387bed54c2 47
hlipka 0:8b387bed54c2 48 ///UDP Socket Event(s)
hlipka 0:8b387bed54c2 49 enum UDPSocketEvent //Only one event here for now, but keeps that model in case we need to implement some others
hlipka 0:8b387bed54c2 50 {
hlipka 0:8b387bed54c2 51 UDPSOCKET_READABLE, ///<Data in buf
hlipka 0:8b387bed54c2 52 };
hlipka 0:8b387bed54c2 53
uci1 2:9cc2c6e42ffd 54 //class NetUdpSocket;
uci1 2:9cc2c6e42ffd 55 //enum NetUdpSocketEvent;
hlipka 0:8b387bed54c2 56
hlipka 0:8b387bed54c2 57 ///This is a simple UDP Socket class
hlipka 0:8b387bed54c2 58 /**
hlipka 0:8b387bed54c2 59 This class exposes an API to deal with UDP Sockets
hlipka 0:8b387bed54c2 60 */
hlipka 0:8b387bed54c2 61 class UDPSocket
hlipka 0:8b387bed54c2 62 {
hlipka 0:8b387bed54c2 63 public:
hlipka 0:8b387bed54c2 64 ///Creates a new socket
hlipka 0:8b387bed54c2 65 UDPSocket();
hlipka 0:8b387bed54c2 66
hlipka 0:8b387bed54c2 67 ///Closes and destroys socket
hlipka 0:8b387bed54c2 68 ~UDPSocket(); //close()
hlipka 0:8b387bed54c2 69
hlipka 0:8b387bed54c2 70 ///Binds the socket to local host or a multicast address
hlipka 0:8b387bed54c2 71 UDPSocketErr bind(const Host& me);
hlipka 0:8b387bed54c2 72
hlipka 0:8b387bed54c2 73 ///Sends data
hlipka 0:8b387bed54c2 74 /*
hlipka 0:8b387bed54c2 75 @param pHost : host to send data to
hlipka 0:8b387bed54c2 76 @return a negative error code or the number of bytes transmitted
hlipka 0:8b387bed54c2 77 */
hlipka 0:8b387bed54c2 78 int /*if < 0 : UDPSocketErr*/ sendto(const char* buf, int len, Host* pHost);
hlipka 0:8b387bed54c2 79
hlipka 0:8b387bed54c2 80 ///Receives data
hlipka 0:8b387bed54c2 81 /*
hlipka 0:8b387bed54c2 82 @param pHost : host from which this piece of data comes from
hlipka 0:8b387bed54c2 83 @return a negative error code or the number of bytes received
hlipka 0:8b387bed54c2 84 */
hlipka 0:8b387bed54c2 85 int /*if < 0 : UDPSocketErr*/ recvfrom(char* buf, int len, Host* pHost);
hlipka 0:8b387bed54c2 86
hlipka 0:8b387bed54c2 87 /* TODO NTH : printf / scanf helpers that call send/recv */
hlipka 0:8b387bed54c2 88
hlipka 0:8b387bed54c2 89 ///Closes socket
hlipka 0:8b387bed54c2 90 UDPSocketErr close();
hlipka 0:8b387bed54c2 91
hlipka 0:8b387bed54c2 92 //Callbacks
hlipka 0:8b387bed54c2 93 ///Setups callback
hlipka 0:8b387bed54c2 94 /**
hlipka 0:8b387bed54c2 95 @param pMethod : callback function
hlipka 0:8b387bed54c2 96 */
hlipka 0:8b387bed54c2 97 void setOnEvent( void (*pMethod)(UDPSocketEvent) );
hlipka 0:8b387bed54c2 98
hlipka 0:8b387bed54c2 99 class CDummy;
hlipka 0:8b387bed54c2 100 ///Setups callback
hlipka 0:8b387bed54c2 101 /**
hlipka 0:8b387bed54c2 102 @param pItem : instance of class on which to execute the callback method
hlipka 0:8b387bed54c2 103 @param pMethod : callback method
hlipka 0:8b387bed54c2 104 */
hlipka 0:8b387bed54c2 105 template<class T>
hlipka 0:8b387bed54c2 106 void setOnEvent( T* pItem, void (T::*pMethod)(UDPSocketEvent) )
hlipka 0:8b387bed54c2 107 {
hlipka 0:8b387bed54c2 108 m_pCbItem = (CDummy*) pItem;
hlipka 0:8b387bed54c2 109 m_pCbMeth = (void (CDummy::*)(UDPSocketEvent)) pMethod;
hlipka 0:8b387bed54c2 110 }
hlipka 0:8b387bed54c2 111
hlipka 0:8b387bed54c2 112 ///Disables callback
hlipka 0:8b387bed54c2 113 void resetOnEvent();
hlipka 0:8b387bed54c2 114
hlipka 0:8b387bed54c2 115 protected:
hlipka 0:8b387bed54c2 116 void onNetUdpSocketEvent(NetUdpSocketEvent e);
hlipka 0:8b387bed54c2 117 UDPSocketErr checkInst();
hlipka 0:8b387bed54c2 118
hlipka 0:8b387bed54c2 119 private:
hlipka 0:8b387bed54c2 120 NetUdpSocket* m_pNetUdpSocket;
hlipka 0:8b387bed54c2 121
hlipka 0:8b387bed54c2 122 CDummy* m_pCbItem;
hlipka 0:8b387bed54c2 123 void (CDummy::*m_pCbMeth)(UDPSocketEvent);
hlipka 0:8b387bed54c2 124
hlipka 0:8b387bed54c2 125 void (*m_pCb)(UDPSocketEvent);
hlipka 0:8b387bed54c2 126
hlipka 0:8b387bed54c2 127 };
hlipka 0:8b387bed54c2 128
hlipka 0:8b387bed54c2 129 #endif