Branch data Line data Source code
1 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 : :
3 : : Header: FGfdmSocket.h
4 : : Author: Jon S. Berndt
5 : : Date started: 11/08/99
6 : :
7 : : ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) -------------
8 : :
9 : : This program is free software; you can redistribute it and/or modify it under
10 : : the terms of the GNU Lesser General Public License as published by the Free Software
11 : : Foundation; either version 2 of the License, or (at your option) any later
12 : : version.
13 : :
14 : : This program is distributed in the hope that it will be useful, but WITHOUT
15 : : ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 : : FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
17 : : details.
18 : :
19 : : You should have received a copy of the GNU Lesser General Public License along with
20 : : this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21 : : Place - Suite 330, Boston, MA 02111-1307, USA.
22 : :
23 : : Further information about the GNU Lesser General Public License can also be found on
24 : : the world wide web at http://www.gnu.org.
25 : :
26 : : HISTORY
27 : : --------------------------------------------------------------------------------
28 : : 11/08/99 JSB Created
29 : : 11/08/07 HDW Added Generic Socket Send
30 : :
31 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 : : SENTRY
33 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34 : :
35 : : #ifndef FGfdmSocket_H
36 : : #define FGfdmSocket_H
37 : :
38 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 : : INCLUDES
40 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 : :
42 : : #include <string>
43 : : #include <sstream>
44 : : #include <sys/types.h>
45 : : #include "FGJSBBase.h"
46 : :
47 : : #if defined(_MSC_VER) || defined(__MINGW32__)
48 : : #include <winsock.h>
49 : : #include <io.h>
50 : : #else
51 : : #include <unistd.h>
52 : : #include <sys/socket.h>
53 : : #include <netinet/in.h>
54 : : #include <arpa/inet.h>
55 : : #include <netdb.h>
56 : : #include <errno.h>
57 : : #include <sys/ioctl.h>
58 : : #endif
59 : :
60 : : #ifdef _MSC_VER
61 : : # pragma comment (lib,"WSock32.lib")
62 : : #endif
63 : :
64 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 : : DEFINITIONS
66 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
67 : :
68 : : #define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.19 2010/05/13 03:07:59 jberndt Exp $"
69 : :
70 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71 : : FORWARD DECLARATIONS
72 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
73 : :
74 : : namespace JSBSim {
75 : :
76 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77 : : CLASS DOCUMENTATION
78 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
79 : :
80 : : /** Encapsulates an object that enables JSBSim to communicate via socket (input
81 : : and/or output).
82 : :
83 : : */
84 : :
85 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86 : : CLASS DECLARATION
87 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
88 : :
89 : : class FGfdmSocket : public FGJSBBase
90 : : {
91 : : public:
92 : : FGfdmSocket(const std::string&, int);
93 : : FGfdmSocket(const std::string&, int, int);
94 : : FGfdmSocket(int);
95 : : ~FGfdmSocket();
96 : : void Send(void);
97 : : void Send(const char *data, int length);
98 : :
99 : : std::string Receive(void);
100 : : int Reply(const std::string& text);
101 : 0 : void Append(const std::string& s) {Append(s.c_str());}
102 : : void Append(const char*);
103 : : void Append(double);
104 : : void Append(long);
105 : : void Clear(void);
106 : : void Clear(const std::string& s);
107 : : void Close(void);
108 : 0 : bool GetConnectStatus(void) {return connected;}
109 : :
110 : : enum {ptUDP, ptTCP};
111 : :
112 : : private:
113 : : int sckt;
114 : : int sckt_in;
115 : : struct sockaddr_in scktName;
116 : : struct hostent *host;
117 : : std::ostringstream buffer;
118 : : bool connected;
119 : : void Debug(int from);
120 : : };
121 : : }
122 : : #endif
|