vrpn  07.33
Virtual Reality Peripheral Network
vrpn_Connection.h
Go to the documentation of this file.
1 #ifndef VRPN_CONNECTION_H
2 #define VRPN_CONNECTION_H
3 
4 #include <stdio.h> // for NULL, sprintf
5 
6 #include "vrpn_Configure.h" // for VRPN_API, VRPN_CALLBACK, etc
7 #include "vrpn_Shared.h" // for SOCKET, timeval
8 #include "vrpn_Types.h" // for vrpn_int32, vrpn_uint32, etc
9 
10 #if !(defined(_WIN32) && defined(VRPN_USE_WINSOCK_SOCKETS))
11 #include <sys/select.h> // for fd_set
12 #endif
13 
14 struct timeval;
15 
16 // Don't complain about using sprintf() when using Visual Studio.
17 #ifdef _MSC_VER
18 #pragma warning(disable : 4995 4996)
19 #endif
20 
21 #if defined(__ANDROID__)
22 #include <bitset>
23 #endif
24 
29  LISTEN = (1),
30  CONNECTED = (0),
33  BROKEN = (-3),
34  LOGGING = (-4)
35 };
36 
37 class VRPN_API
38  vrpn_File_Connection; // Forward declaration for get_File_Connection()
39 
45  vrpn_int32 type;
46  vrpn_int32 sender;
47  struct timeval msg_time;
48  vrpn_int32 payload_len;
49  const char *buffer;
50 };
51 
53 typedef int(VRPN_CALLBACK *vrpn_MESSAGEHANDLER)(void *userdata,
55 
59 
63 const unsigned vrpn_ALIGN = 8;
64 
70 const int vrpn_CONNECTION_MAX_SENDERS = 2000;
71 const int vrpn_CONNECTION_MAX_TYPES = 2000;
73 
76 
77 const int vrpn_ANY_SENDER = -1;
78 
81 
82 const int vrpn_ANY_TYPE = -1;
83 
94 
95 const int vrpn_CONNECTION_TCP_BUFLEN = 64000;
96 const int vrpn_CONNECTION_UDP_BUFLEN = 1472;
98 
101 
102 const int vrpn_MAX_ENDPOINTS = 256;
103 
106 const vrpn_int32 vrpn_CONNECTION_SENDER_DESCRIPTION = (-1);
107 const vrpn_int32 vrpn_CONNECTION_TYPE_DESCRIPTION = (-2);
108 const vrpn_int32 vrpn_CONNECTION_UDP_DESCRIPTION = (-3);
109 const vrpn_int32 vrpn_CONNECTION_LOG_DESCRIPTION = (-4);
110 const vrpn_int32 vrpn_CONNECTION_DISCONNECT_MESSAGE = (-5);
112 
119 
120 const vrpn_uint32 vrpn_CONNECTION_RELIABLE = (1 << 0);
121 const vrpn_uint32 vrpn_CONNECTION_FIXED_LATENCY = (1 << 1);
122 const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY = (1 << 2);
123 const vrpn_uint32 vrpn_CONNECTION_FIXED_THROUGHPUT = (1 << 3);
124 const vrpn_uint32 vrpn_CONNECTION_HIGH_THROUGHPUT = (1 << 4);
125 
127 
130 const long vrpn_LOG_NONE = (0);
131 const long vrpn_LOG_INCOMING = (1 << 0);
132 const long vrpn_LOG_OUTGOING = (1 << 1);
134 
135 // If defined, will filter out messages: if the remote side hasn't
136 // registered a type, messages of that type won't be sent over the
137 // link. WARNING: auto-type-registration breaks this.
138 //#define vrpn_FILTER_MESSAGES
139 
143 extern VRPN_API const char *vrpn_got_first_connection;
144 extern VRPN_API const char *vrpn_got_connection;
145 extern VRPN_API const char *vrpn_dropped_connection;
146 extern VRPN_API const char *vrpn_dropped_last_connection;
148 
154 
155 extern VRPN_API const char *vrpn_CONTROL;
156 
158 typedef char cName[100];
159 
165 };
166 
172 
176  void *userdata;
177  vrpn_int32 sender;
179 };
180 
183  void *userdata;
185 };
187 
189 class VRPN_API vrpn_Log;
192 
199 
201 
202 public:
204  vrpn_int32 *connectedEndpointCounter);
205  virtual ~vrpn_Endpoint(void);
206 
209 
211  int local_type_id(vrpn_int32 remote_type) const;
212 
214  int local_sender_id(vrpn_int32 remote_sender) const;
215 
216  virtual vrpn_bool doing_okay(void) const = 0;
218 
221 
222  void init(void);
223 
224  virtual int mainloop(timeval *timeout) = 0;
225 
229  void clear_other_senders_and_types(void);
230 
234  int newLocalSender(const char *name, vrpn_int32 which);
235  int newLocalType(const char *name, vrpn_int32 which);
236 
240  int newRemoteType(cName type_name, vrpn_int32 remote_id,
241  vrpn_int32 local_id);
242  int newRemoteSender(cName sender_name, vrpn_int32 remote_id,
243  vrpn_int32 local_id);
245 
248  virtual int pack_message(vrpn_uint32 len, struct timeval time,
249  vrpn_int32 type, vrpn_int32 sender,
250  const char *buffer,
251  vrpn_uint32 class_of_service) = 0;
252 
256  virtual int send_pending_reports(void) = 0;
257 
258  int pack_log_description(void);
260 
261  virtual int setup_new_connection(void) = 0;
264 
265  virtual void poll_for_cookie(const timeval *timeout = NULL) = 0;
266  virtual int finish_new_connection_setup(void) = 0;
267 
268  virtual void drop_connection(void) = 0;
272 
273  virtual void clearBuffers(void) = 0;
276 
277  int pack_sender_description(vrpn_int32 which);
279 
280  int pack_type_description(vrpn_int32 which);
282 
284  int status;
285 
289 
293 
297  char rhostname[150];
298 
303 
306 
307  void setLogNames(const char *inName, const char *outName);
308  int openLogs(void);
310 
315  static int VRPN_CALLBACK
316  handle_sender_message(void *userdata, vrpn_HANDLERPARAM p);
317  static int VRPN_CALLBACK
318  handle_type_message(void *userdata, vrpn_HANDLERPARAM p);
320 
324  void setConnection(vrpn_Connection *conn) { d_parent = conn; }
325  vrpn_Connection *getConnection() { return d_parent; }
327 
328 protected:
329  virtual int dispatch(vrpn_int32 type, vrpn_int32 sender, timeval time,
330  vrpn_uint32 payload_len, char *bufptr);
331 
332  int tryToMarshall(char *outbuf, vrpn_int32 &buflen, vrpn_int32 &numOut,
333  vrpn_uint32 len, timeval time, vrpn_int32 type,
334  vrpn_int32 sender, const char *buffer,
335  vrpn_uint32 classOfService);
339 
340  int marshall_message(char *outbuf, vrpn_uint32 outbuf_size,
341  vrpn_uint32 initial_out, vrpn_uint32 len,
342  struct timeval time, vrpn_int32 type,
343  vrpn_int32 sender, const char *buffer,
344  vrpn_uint32 sequenceNumber);
345 
346  // The senders and types we know about that have been described by
347  // the other end of the connection. Also, record the local mapping
348  // for ones that have been described with the same name locally.
349  // The arrays are indexed by the ID from the other side, and store
350  // the name and local ID that corresponds to each.
351 
354 
356  vrpn_int32 *d_connectionCounter;
357 
359 };
360 
368 
370 
371 public:
373  vrpn_int32 *connectedEndpointCounter);
374  virtual ~vrpn_Endpoint_IP(void);
375 
378  virtual vrpn_bool doing_okay(void) const;
379 
381  vrpn_bool outbound_udp_open(void) const;
382 
383  vrpn_int32 tcp_outbuf_size(void) const;
384  vrpn_int32 udp_outbuf_size(void) const;
386 
389 
390  void init(void);
391 
392  int mainloop(timeval *timeout);
393 
398  int pack_message(vrpn_uint32 len, struct timeval time, vrpn_int32 type,
399  vrpn_int32 sender, const char *buffer,
400  vrpn_uint32 class_of_service);
401 
406  virtual int send_pending_reports(void);
407 
408  int pack_udp_description(int portno);
409 
410  int handle_tcp_messages(const timeval *timeout);
411  int handle_udp_messages(const timeval *timeout);
412 
413  int connect_tcp_to(const char *msg);
414  int connect_tcp_to(const char *addr, int port);
417  int connect_udp_to(const char *addr, int port);
421 
422  vrpn_int32 set_tcp_outbuf_size(vrpn_int32 bytecount);
423 
424  int setup_new_connection(void);
427 
428  void poll_for_cookie(const timeval *timeout = NULL);
429  int finish_new_connection_setup(void);
430 
431  void drop_connection(void);
435 
436  void clearBuffers(void);
439 
440  void setNICaddress(const char *);
441 
445 
447 
451 
457 
461 
465 
466  vrpn_bool d_tcp_only;
471 
472 protected:
473  int getOneTCPMessage(int fd, char *buf, size_t buflen);
474  int getOneUDPMessage(char *buf, size_t buflen);
475 
483 
484  char *d_tcpOutbuf;
485  char *d_udpOutbuf;
486  vrpn_int32 d_tcpBuflen;
487  vrpn_int32 d_udpBuflen;
488  vrpn_int32 d_tcpNumOut;
489  vrpn_int32 d_udpNumOut;
490 
493 
494  vrpn_float64
495  d_tcpAlignedInbuf[vrpn_CONNECTION_TCP_BUFLEN / sizeof(vrpn_float64) +
496  1];
497  vrpn_float64
498  d_udpAlignedInbuf[vrpn_CONNECTION_UDP_BUFLEN / sizeof(vrpn_float64) +
499  1];
500  char *d_tcpInbuf;
501  char *d_udpInbuf;
502 
504 };
505 
511 
512 protected:
517  vrpn_Connection(const char *local_in_logfile_name,
518  const char *local_out_logfile_name,
520  vrpn_int32 *) = allocateEndpoint);
521 
525  vrpn_Connection(const char *local_in_logfile_name,
526  const char *local_out_logfile_name,
527  const char *remote_in_logfile_name,
528  const char *remote_out_logfile_name,
530  vrpn_int32 *) = allocateEndpoint);
531 
532 public:
533  virtual ~vrpn_Connection(void);
534 
536  virtual vrpn_bool doing_okay(void) const;
537 
540  virtual vrpn_bool connected(void) const;
541 
548  void get_log_names(char **local_in_logname, char **local_out_logname,
549  char **remote_in_logname, char **remote_out_logname);
550 
558  virtual int mainloop(const struct timeval *timeout = NULL) = 0;
559 
562  virtual vrpn_int32 register_sender(const char *name);
563  virtual vrpn_int32 register_message_type(const char *name);
564 
570  virtual int register_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
571  void *userdata,
572  vrpn_int32 sender = vrpn_ANY_SENDER);
573  virtual int unregister_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
574  void *userdata,
575  vrpn_int32 sender = vrpn_ANY_SENDER);
576 
579  virtual int pack_message(vrpn_uint32 len, struct timeval time,
580  vrpn_int32 type, vrpn_int32 sender,
581  const char *buffer, vrpn_uint32 class_of_service);
582 
586  virtual int send_pending_reports(void) = 0;
587 
590  virtual int time_since_connection_open(struct timeval *elapsed_time);
591 
594  virtual timeval get_time();
595 
599  virtual const char *sender_name(vrpn_int32 sender);
600  virtual const char *message_type_name(vrpn_int32 type);
601 
609  virtual int register_log_filter(vrpn_LOGFILTER filter, void *userdata);
610 
612  virtual int save_log_so_far();
613 
616  virtual vrpn_File_Connection *get_File_Connection(void);
617 
638  void Jane_stop_this_crazy_thing(vrpn_uint32 stop_looking_after)
639  {
640  d_stop_processing_messages_after = stop_looking_after;
641  };
642  vrpn_uint32 get_Jane_value(void)
643  {
644  return d_stop_processing_messages_after;
645  };
646 
647 protected:
652 
654 
655  static vrpn_Endpoint_IP *allocateEndpoint(vrpn_Connection *,
656  vrpn_int32 *connectedEC);
662 
666  vrpn_int32 d_numEndpoints;
667 
673 
676  static int VRPN_CALLBACK
677  handle_log_message(void *userdata, vrpn_HANDLERPARAM p);
678  static int VRPN_CALLBACK
679  handle_disconnect_message(void *userdata, vrpn_HANDLERPARAM p);
681 
682  virtual void init(void);
683 
684  int delete_endpoint(int whichEndpoint);
685  int compact_endpoints(void);
686 
687  virtual int pack_sender_description(vrpn_int32 which);
689 
690  virtual int pack_type_description(vrpn_int32 which);
692 
693  virtual int do_callbacks_for(vrpn_int32 type, vrpn_int32 sender,
694  struct timeval time, vrpn_uint32 len,
695  const char *buffer);
696 
698  int message_type_is_registered(const char *) const;
699 
701  timeval start_time;
702 
703  //
705 public:
706  void addReference();
707  void removeReference();
708 
709 private:
710  int d_references;
711 
712  //
723 public:
724  void setAutoDeleteStatus(bool setvalue) { d_autoDeleteStatus = setvalue; }
725 
726 private:
727  bool d_autoDeleteStatus;
728 
729 public:
734 
736 
737 protected:
738  int doSystemCallbacksFor(vrpn_HANDLERPARAM, void *);
739 
748 
749  // vrpn_Endpoint * d_serverLogEndpoint;
751  vrpn_int32 d_serverLogMode;
753 
754  vrpn_Endpoint_IP *(*d_endpointAllocator)(vrpn_Connection *, vrpn_int32 *);
755  vrpn_bool d_updateEndpoint;
756 
757  virtual void updateEndpoints(void);
763 };
764 
766 
767 protected:
779  vrpn_Connection_IP(const char *server_name,
780  int port = vrpn_DEFAULT_LISTEN_PORT_NO,
781  const char *local_in_logfile_name = NULL,
782  const char *local_out_logfile_name = NULL,
783  const char *remote_in_logfile_name = NULL,
784  const char *remote_out_logfile_name = NULL,
785  const char *NIC_IPaddress = NULL,
786  vrpn_Endpoint_IP *(*epa)(
787  vrpn_Connection *, vrpn_int32 *) = allocateEndpoint);
788 
789 public:
794  unsigned short listen_port_no = vrpn_DEFAULT_LISTEN_PORT_NO,
795  const char *local_in_logfile_name = NULL,
796  const char *local_out_logfile_name = NULL,
797  const char *NIC_IPaddress = NULL,
799  vrpn_int32 *) = allocateEndpoint);
800 
801  virtual ~vrpn_Connection_IP(void);
802 
805  virtual int connect_to_client(const char *machine, int port);
806 
814  virtual int mainloop(const struct timeval *timeout = NULL);
815 
816 protected:
821 
822 protected:
824  const char *cname, const char *local_in_logfile_name,
825  const char *local_out_logfile_name, const char *remote_in_logfile_name,
826  const char *remote_out_logfile_name, const char *NIC_IPaddress,
827  bool force_connection);
828  friend VRPN_API vrpn_Connection *
829  vrpn_create_server_connection(const char *cname,
830  const char *local_in_logfile_name,
831  const char *local_out_logfile_name);
832 
837 
840  static int VRPN_CALLBACK
841  handle_UDP_message(void *userdata, vrpn_HANDLERPARAM p);
842 
844  virtual void init(void);
845 
850  virtual int send_pending_reports(void);
851 
855  virtual void
856  server_check_for_incoming_connections(const struct timeval *timeout = NULL);
857 
861  virtual void handle_connection(int whichEndpoint);
862 
863  virtual void drop_connection(int whichEndpoint);
864 
865  char *d_NIC_IP;
866 };
867 
873 
875 
876 protected:
882 public:
883  virtual ~vrpn_Connection_Loopback(void);
884 
891  virtual int mainloop(const struct timeval *timeout = NULL);
892 
894  virtual vrpn_bool doing_okay(void) const { return vrpn_true; }
895 
898  virtual vrpn_bool connected(void) const { return vrpn_true; }
899 
900 protected:
901  friend VRPN_API vrpn_Connection *
902  vrpn_create_server_connection(const char *cname,
903  const char *local_in_logfile_name,
904  const char *local_out_logfile_name);
905 
910  virtual int send_pending_reports(void) {return 0;}
911 };
912 
923  const char *cname, const char *local_in_logfile_name = NULL,
924  const char *local_out_logfile_name = NULL,
925  const char *remote_in_logfile_name = NULL,
926  const char *remote_out_logfile_name = NULL,
927  const char *NIC_IPaddress = NULL, bool force_reopen = false);
928 
946 vrpn_create_server_connection(const char *cname,
947  const char *local_in_logfile_name = NULL,
948  const char *local_out_logfile_name = NULL);
949 
954 inline VRPN_API vrpn_Connection *
956  const char *local_in_logfile_name = NULL,
957  const char *local_out_logfile_name = NULL,
958  const char *NIC_NAME = NULL)
959 {
960  char name[256];
961  if (NIC_NAME == NULL) {
962  sprintf(name, ":%d", port);
963  }
964  else {
965  sprintf(name, "%s:%d", NIC_NAME, port);
966  }
967  return vrpn_create_server_connection(name, local_in_logfile_name,
968  local_out_logfile_name);
969 }
970 
975 VRPN_API char *vrpn_copy_service_name(const char *fullname);
976 VRPN_API char *vrpn_copy_service_location(const char *fullname);
978 
986 VRPN_API char *vrpn_copy_file_name(const char *filespecifier);
987 
1003 VRPN_API char *vrpn_copy_machine_name(const char *hostspecifier);
1004 VRPN_API int vrpn_get_port_number(const char *hostspecifier);
1005 VRPN_API char *vrpn_copy_rsh_program(const char *hostspecifier);
1006 VRPN_API char *vrpn_copy_rsh_arguments(const char *hostspecifier);
1008 
1010 char *vrpn_set_service_name(const char *specifier, const char *newServiceName);
1011 
1017 VRPN_API int check_vrpn_cookie(const char *buffer);
1018 VRPN_API int check_vrpn_file_cookie(const char *buffer);
1020 
1023 VRPN_API size_t vrpn_cookie_size(void);
1024 
1025 VRPN_API int write_vrpn_cookie(char *buffer, size_t length,
1026  long remote_log_mode);
1027 
1031 #ifndef VRPN_USE_WINSOCK_SOCKETS
1032 int VRPN_API
1033 vrpn_noint_block_write(int outfile, const char buffer[], size_t length);
1034 int VRPN_API vrpn_noint_block_read(int infile, char buffer[], size_t length);
1035 int VRPN_API vrpn_noint_select(int width, fd_set *readfds, fd_set *writefds,
1036  fd_set *exceptfds, struct timeval *timeout);
1037 #else /* winsock sockets */
1038 int VRPN_API
1039 vrpn_noint_block_write(SOCKET outsock, char *buffer, size_t length);
1040 int VRPN_API vrpn_noint_block_read(SOCKET insock, char *buffer, size_t length);
1041 #endif /* VRPN_USE_WINSOCK_SOCKETS */
1042 
1056 // This section holds data structures and functions to open
1057 // connections by name.
1058 // The intention of this section is that it can open connections for
1059 // objects that are in different libraries (trackers, buttons and sound),
1060 // even if they all refer to the same connection.
1061 
1063 
1064 public:
1065  ~vrpn_ConnectionManager(void);
1066 
1072  static vrpn_ConnectionManager &instance(void);
1073 
1077  void addConnection(vrpn_Connection *, const char *name);
1078  void deleteConnection(vrpn_Connection *);
1080 
1083  vrpn_Connection *getByName(const char *name);
1084 
1085 private:
1086  struct knownConnection {
1087  char name[1000];
1088  vrpn_Connection *connection;
1089  knownConnection *next;
1090  };
1091 
1093  knownConnection *d_kcList;
1094 
1096  knownConnection *d_anonList;
1097 
1098  vrpn_ConnectionManager(void);
1099 
1100  // @brief copy constructor undefined to prevent instantiations
1102 
1103  static void deleteConnection(vrpn_Connection *, knownConnection **);
1104 };
1105 
1106 #endif // VRPN_CONNECTION_H
LOGGING
@ LOGGING
Definition: vrpn_Connection.h:34
vrpn_cookie_size
VRPN_API size_t vrpn_cookie_size(void)
Returns the size of the magic cookie buffer, plus any alignment overhead.
Definition: vrpn_Connection.C:2630
vrpn_Connection::setAutoDeleteStatus
void setAutoDeleteStatus(bool setvalue)
Specify whether this connection should be deleted automatically when it is no longer need (reference ...
Definition: vrpn_Connection.h:724
vrpn_TypeDispatcher
class VRPN_API vrpn_TypeDispatcher
Definition: vrpn_Connection.h:191
vrpn_Connection::connectionStatus
int connectionStatus
Status of the connection.
Definition: vrpn_Connection.h:653
vrpn_CONNECTION_DISCONNECT_MESSAGE
const vrpn_int32 vrpn_CONNECTION_DISCONNECT_MESSAGE
Definition: vrpn_Connection.h:110
vrpn_Endpoint_IP::d_tcpNumOut
vrpn_int32 d_tcpNumOut
Definition: vrpn_Connection.h:488
vrpn_CONNECTION_HIGH_THROUGHPUT
const vrpn_uint32 vrpn_CONNECTION_HIGH_THROUGHPUT
Definition: vrpn_Connection.h:124
vrpn_Endpoint::d_types
vrpn_TranslationTable * d_types
Definition: vrpn_Connection.h:353
vrpn_Endpoint::d_remoteOutLogName
char * d_remoteOutLogName
Name of the remote log file.
Definition: vrpn_Connection.h:292
vrpn_CONNECTION_FIXED_THROUGHPUT
const vrpn_uint32 vrpn_CONNECTION_FIXED_THROUGHPUT
Definition: vrpn_Connection.h:123
vrpn_ConnectionManager
Singleton class that keeps track of all known VRPN connections and makes sure they're deleted on shut...
Definition: vrpn_Connection.h:1062
vrpn_Endpoint::pack_message
virtual int pack_message(vrpn_uint32 len, struct timeval time, vrpn_int32 type, vrpn_int32 sender, const char *buffer, vrpn_uint32 class_of_service)=0
Pack a message that will be sent the next time mainloop() is called. Turn off the RELIABLE flag if yo...
vrpn_CONTROL
VRPN_API const char * vrpn_CONTROL
vrpn_CONTROL is the sender used for notification messages sent to the user from the local VRPN implem...
Definition: vrpn_Connection.C:190
vrpn_got_first_connection
VRPN_API const char * vrpn_got_first_connection
These are the strings that define the system-generated message types that tell when connections are r...
Definition: vrpn_Connection.C:184
vrpn_Types.h
vrpn_LOGLIST::next
vrpn_LOGLIST * next
Definition: vrpn_Connection.h:163
vrpn_Connection::init
virtual void init(void)
Base initialization for all constructors.
Definition: vrpn_Connection.C:4752
vrpn_Connection::d_serverLogCount
int d_serverLogCount
Server logging w. multiconnection - TCH July 00 Use one "hidden" endpoint for outgoing logs (?...
Definition: vrpn_Connection.h:750
vrpn_ALIGN
const unsigned vrpn_ALIGN
VRPN buffers are aligned on 8 byte boundaries so that we can pack and unpack doubles into them on arc...
Definition: vrpn_Connection.h:63
vrpnLogFilterEntry::next
vrpnLogFilterEntry * next
Definition: vrpn_Connection.h:184
vrpn_Endpoint::doing_okay
virtual vrpn_bool doing_okay(void) const =0
vrpn_DEFAULT_LISTEN_PORT_NO
#define vrpn_DEFAULT_LISTEN_PORT_NO
Definition: vrpn_Configure.h:39
vrpn_Connection::start_time
timeval start_time
Timekeeping - TCH 30 June 98.
Definition: vrpn_Connection.h:701
vrpn_CONNECTION_MAX_SENDERS
const int vrpn_CONNECTION_MAX_SENDERS
Types now have their storage dynamically allocated, so we can afford to have large tables....
Definition: vrpn_Connection.h:70
vrpn_Connection::d_updateEndpoint
vrpn_bool d_updateEndpoint
Definition: vrpn_Connection.h:755
vrpn_copy_service_location
VRPN_API char * vrpn_copy_service_location(const char *fullname)
Definition: vrpn_Connection.C:6353
vrpn_Endpoint::mainloop
virtual int mainloop(timeval *timeout)=0
vrpn_dropped_last_connection
VRPN_API const char * vrpn_dropped_last_connection
Definition: vrpn_Connection.C:187
vrpn_Endpoint::d_outLog
vrpn_Log * d_outLog
Definition: vrpn_Connection.h:305
vrpnLogFilterEntry::filter
vrpn_LOGFILTER filter
routine to call
Definition: vrpn_Connection.h:182
vrpn_Connection::d_numConnectedEndpoints
vrpn_int32 d_numConnectedEndpoints
We need to track the number of connected endpoints separately to properly send out got-first-connecti...
Definition: vrpn_Connection.h:668
vrpn_Connection
class VRPN_API vrpn_Connection
Definition: vrpn_Connection.h:188
vrpnMsgCallbackEntry
Description of a callback entry for a user type.
Definition: vrpn_Connection.h:174
vrpn_get_port_number
VRPN_API int vrpn_get_port_number(const char *hostspecifier)
Definition: vrpn_Connection.C:6464
vrpn_TranslationTable
class VRPN_API vrpn_TranslationTable
Definition: vrpn_Connection.h:190
vrpn_HANDLERPARAM::payload_len
vrpn_int32 payload_len
Definition: vrpn_Connection.h:48
vrpn_CONNECTION_UDP_DESCRIPTION
const vrpn_int32 vrpn_CONNECTION_UDP_DESCRIPTION
Definition: vrpn_Connection.h:108
vrpn_Endpoint_IP
Encapsulation of the data and methods for a single IP-based connection to take care of one part of ma...
Definition: vrpn_Connection.h:369
vrpn_File_Connection
Definition: vrpn_FileConnection.h:73
vrpn_dropped_connection
VRPN_API const char * vrpn_dropped_connection
Definition: vrpn_Connection.C:186
vrpn_Connection_Loopback::doing_okay
virtual vrpn_bool doing_okay(void) const
Returns vrpn_true if the connection is okay, vrpn_false if not.
Definition: vrpn_Connection.h:894
vrpn_copy_file_name
VRPN_API char * vrpn_copy_file_name(const char *filespecifier)
Utility routines to parse file specifiers FROM service locations.
Definition: vrpn_Connection.C:6372
LISTEN
@ LISTEN
Definition: vrpn_Connection.h:29
vrpnMsgCallbackEntry::handler
vrpn_MESSAGEHANDLER handler
Routine to call.
Definition: vrpn_Connection.h:175
vrpn_Endpoint
Encapsulation of the data and methods for a single generic connection to take care of one part of man...
Definition: vrpn_Connection.h:200
vrpn_CONNECTION_TCP_BUFLEN
const int vrpn_CONNECTION_TCP_BUFLEN
Definition: vrpn_Connection.h:95
vrpn_Endpoint_IP::d_udpInboundSocket
SOCKET d_udpInboundSocket
Inbound unreliable messages come here. Need one for each due to different clock synchronization for e...
Definition: vrpn_Connection.h:477
vrpn_Endpoint_IP::d_tcpSocket
SOCKET d_tcpSocket
Definition: vrpn_Connection.h:446
COOKIE_PENDING
@ COOKIE_PENDING
Definition: vrpn_Connection.h:31
vrpn_ConnectionStatus
vrpn_ConnectionStatus
This is the list of states that a connection can be in (possible values for status)....
Definition: vrpn_Connection.h:28
write_vrpn_cookie
VRPN_API int write_vrpn_cookie(char *buffer, size_t length, long remote_log_mode)
Writes the magic cookie into buffer with given length.
Definition: vrpn_Connection.C:2542
vrpn_MAX_ENDPOINTS
const int vrpn_MAX_ENDPOINTS
Number of endpoints that a server connection can have. Arbitrary limit.
Definition: vrpn_Connection.h:102
vrpn_CONNECTION_LOW_LATENCY
const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY
Definition: vrpn_Connection.h:122
vrpn_Endpoint_IP::d_tcp_only
vrpn_bool d_tcp_only
For connections made through firewalls or NAT with the tcp: URL, we do not want to allow the endpoint...
Definition: vrpn_Connection.h:466
vrpn_CONNECTION_UDP_BUFLEN
const int vrpn_CONNECTION_UDP_BUFLEN
Definition: vrpn_Connection.h:96
vrpn_LOG_OUTGOING
const long vrpn_LOG_OUTGOING
Definition: vrpn_Connection.h:132
vrpn_Endpoint_IP::d_tcpSequenceNumber
vrpn_int32 d_tcpSequenceNumber
Definition: vrpn_Connection.h:491
vrpn_Endpoint::finish_new_connection_setup
virtual int finish_new_connection_setup(void)=0
vrpn_Endpoint_IP::d_last_connect_attempt
timeval d_last_connect_attempt
When the last UDP lob occurred.
Definition: vrpn_Connection.h:464
vrpn_Endpoint::setConnection
void setConnection(vrpn_Connection *conn)
Definition: vrpn_Connection.h:324
vrpn_HANDLERPARAM::buffer
const char * buffer
Definition: vrpn_Connection.h:49
vrpn_Endpoint::d_parent
vrpn_Connection * d_parent
Definition: vrpn_Connection.h:358
vrpn_Endpoint::getConnection
vrpn_Connection * getConnection()
Definition: vrpn_Connection.h:325
vrpn_Endpoint::d_connectionCounter
vrpn_int32 * d_connectionCounter
Definition: vrpn_Connection.h:356
vrpn_copy_rsh_arguments
VRPN_API char * vrpn_copy_rsh_arguments(const char *hostspecifier)
Definition: vrpn_Connection.C:6509
vrpn_CONNECTION_RELIABLE
const vrpn_uint32 vrpn_CONNECTION_RELIABLE
Classes of service for messages, specify multiple by ORing them together Priority of satisfying these...
Definition: vrpn_Connection.h:120
vrpn_Connection_Loopback::connected
virtual vrpn_bool connected(void) const
Returns vrpn_true if the connection has been established, vrpn_false if not (For a networkless connec...
Definition: vrpn_Connection.h:898
vrpn_HANDLERPARAM
This structure is what is passed to a vrpn_Connection message callback.
Definition: vrpn_Connection.h:44
vrpn_Shared.h
vrpn_Endpoint::send_pending_reports
virtual int send_pending_reports(void)=0
send pending report, clear the buffer. This function was protected, now is public,...
vrpn_Endpoint_IP::d_udpLobSocket
SOCKET d_udpLobSocket
Socket to use to lob UDP requests asking for the server to call us back.
Definition: vrpn_Connection.h:460
vrpn_Connection::d_dispatcher
vrpn_TypeDispatcher * d_dispatcher
Derived classes need access to d_dispatcher in their allocateEndpoint() routine. Several compilers wo...
Definition: vrpn_Connection.h:735
vrpn_CONNECTION_LOG_DESCRIPTION
const vrpn_int32 vrpn_CONNECTION_LOG_DESCRIPTION
Definition: vrpn_Connection.h:109
vrpn_CONNECTION_MAX_TYPES
const int vrpn_CONNECTION_MAX_TYPES
Definition: vrpn_Connection.h:71
vrpn_Endpoint_IP::d_tcpOutbuf
char * d_tcpOutbuf
Definition: vrpn_Connection.h:484
vrpn_Endpoint_IP::d_remote_machine_name
char * d_remote_machine_name
Machine to call.
Definition: vrpn_Connection.h:462
vrpn_Endpoint::clearBuffers
virtual void clearBuffers(void)=0
Empties out the TCP and UDP send buffers. Needed by vrpn_FileConnection to get at {udp,...
vrpn_Connection::get_Jane_value
vrpn_uint32 get_Jane_value(void)
Definition: vrpn_Connection.h:642
vrpn_Endpoint::init
void init(void)
Definition: vrpn_Connection.C:2774
vrpn_copy_machine_name
VRPN_API char * vrpn_copy_machine_name(const char *hostspecifier)
Definition: vrpn_Connection.C:6434
vrpn_Endpoint_IP::d_tcpBuflen
vrpn_int32 d_tcpBuflen
Definition: vrpn_Connection.h:486
vrpn_LOGLIST::prev
vrpn_LOGLIST * prev
Definition: vrpn_Connection.h:164
vrpn_Endpoint::poll_for_cookie
virtual void poll_for_cookie(const timeval *timeout=NULL)=0
vrpn_LOGFILTER
vrpn_MESSAGEHANDLER vrpn_LOGFILTER
Type of handler for filters on logfiles is the same as connection handler.
Definition: vrpn_Connection.h:58
vrpn_Connection::mainloop
virtual int mainloop(const struct timeval *timeout=NULL)=0
Call each time through program main loop to handle receiving any incoming messages and sending any pa...
vrpn_copy_service_name
VRPN_API char * vrpn_copy_service_name(const char *fullname)
Definition: vrpn_Connection.C:6335
vrpn_HANDLERPARAM::msg_time
struct timeval msg_time
Definition: vrpn_Connection.h:47
vrpn_got_connection
VRPN_API const char * vrpn_got_connection
Definition: vrpn_Connection.C:185
vrpn_Connection_IP::listen_tcp_sock
SOCKET listen_tcp_sock
TCP Connection requests come here.
Definition: vrpn_Connection.h:836
vrpn_Endpoint::drop_connection
virtual void drop_connection(void)=0
Should only be called by vrpn_Connection::drop_connection(), since there's more housecleaning to do a...
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition: vrpn_Connection.h:510
vrpn_LOGLIST
Placed here so vrpn_FileConnection can use it too.
Definition: vrpn_Connection.h:161
vrpn_Connection::d_numEndpoints
vrpn_int32 d_numEndpoints
Definition: vrpn_Connection.h:666
vrpn_Endpoint_IP::d_tcpInbuf
char * d_tcpInbuf
Definition: vrpn_Connection.h:500
vrpn_Endpoint_IP::d_udpOutbuf
char * d_udpOutbuf
Definition: vrpn_Connection.h:485
vrpn_ANY_TYPE
const int vrpn_ANY_TYPE
vrpn_ANY_TYPE can be used to register callbacks for any USER type of message from a given sender....
Definition: vrpn_Connection.h:82
vrpn_Connection::d_serverLogMode
vrpn_int32 d_serverLogMode
Definition: vrpn_Connection.h:751
vrpn_LOG_NONE
const long vrpn_LOG_NONE
Definition: vrpn_Connection.h:130
vrpn_noint_block_read
int VRPN_API vrpn_noint_block_read(int infile, char buffer[], size_t length)
Definition: vrpn_Connection.C:1757
vrpn_Connection::d_serverLogName
char * d_serverLogName
Definition: vrpn_Connection.h:752
vrpn_noint_block_write
int VRPN_API vrpn_noint_block_write(int outfile, const char buffer[], size_t length)
Definition: vrpn_Connection.C:1721
vrpn_Endpoint::d_inLog
vrpn_Log * d_inLog
Definition: vrpn_Connection.h:304
vrpn_Connection_IP::d_NIC_IP
char * d_NIC_IP
Definition: vrpn_Connection.h:865
vrpn_Endpoint_IP::d_NICaddress
char * d_NICaddress
Definition: vrpn_Connection.h:503
vrpn_create_server_connection
VRPN_API vrpn_Connection * vrpn_create_server_connection(const char *cname, const char *local_in_logfile_name=NULL, const char *local_out_logfile_name=NULL)
Create a server connection of arbitrary type (VRPN UDP/TCP, TCP, File, Loopback, MPI).
Definition: vrpn_Connection.C:5358
vrpn_get_connection_by_name
VRPN_API vrpn_Connection * vrpn_get_connection_by_name(const char *cname, const char *local_in_logfile_name=NULL, const char *local_out_logfile_name=NULL, const char *remote_in_logfile_name=NULL, const char *remote_out_logfile_name=NULL, const char *NIC_IPaddress=NULL, bool force_reopen=false)
Create a client connection of arbitrary type (VRPN UDP/TCP, TCP, File, Loopback, MPI).
Definition: vrpn_Connection.C:5277
vrpn_ANY_SENDER
const int vrpn_ANY_SENDER
vrpn_ANY_SENDER can be used to register callbacks on a given message type from any sender.
Definition: vrpn_Connection.h:77
BROKEN
@ BROKEN
Definition: vrpn_Connection.h:33
check_vrpn_file_cookie
VRPN_API int check_vrpn_file_cookie(const char *buffer)
Definition: vrpn_Connection.C:2590
vrpn_MESSAGEHANDLER
int(VRPN_CALLBACK * vrpn_MESSAGEHANDLER)(void *userdata, vrpn_HANDLERPARAM p)
Type of a message handler for vrpn_Connection messages.
Definition: vrpn_Connection.h:53
vrpn_Connection::d_stop_processing_messages_after
vrpn_uint32 d_stop_processing_messages_after
If this value is greater than zero, the connection should stop looking for new messages on a given en...
Definition: vrpn_Connection.h:645
VRPN_CALLBACK
#define VRPN_CALLBACK
Definition: vrpn_Configure.h:647
vrpn_Endpoint_IP::d_udpSequenceNumber
vrpn_int32 d_udpSequenceNumber
Definition: vrpn_Connection.h:492
vrpn_Endpoint_IP::d_udpInbuf
char * d_udpInbuf
Definition: vrpn_Connection.h:501
vrpn_Endpoint_IP::d_udpOutboundSocket
SOCKET d_udpOutboundSocket
Definition: vrpn_Connection.h:476
vrpn_CONNECTION_TYPE_DESCRIPTION
const vrpn_int32 vrpn_CONNECTION_TYPE_DESCRIPTION
Definition: vrpn_Connection.h:107
vrpn_LOGLIST::data
vrpn_HANDLERPARAM data
Definition: vrpn_Connection.h:162
vrpn_Endpoint::d_remoteInLogName
char * d_remoteInLogName
Name of the remote log file.
Definition: vrpn_Connection.h:291
vrpn_Endpoint::setup_new_connection
virtual int setup_new_connection(void)=0
Sends the magic cookie and other information to its peer. It is called by both the client and server ...
TRYING_TO_CONNECT
@ TRYING_TO_CONNECT
Definition: vrpn_Connection.h:32
vrpn_LOG_INCOMING
const long vrpn_LOG_INCOMING
Definition: vrpn_Connection.h:131
vrpn_Connection_Loopback::send_pending_reports
virtual int send_pending_reports(void)
send pending report, clear the buffer.
Definition: vrpn_Connection.h:910
vrpn_copy_rsh_program
VRPN_API char * vrpn_copy_rsh_program(const char *hostspecifier)
Definition: vrpn_Connection.C:6484
vrpn_HANDLERPARAM::type
vrpn_int32 type
Definition: vrpn_Connection.h:45
vrpn_Endpoint::d_remoteLogMode
long d_remoteLogMode
Mode to put the remote logging in.
Definition: vrpn_Connection.h:290
vrpn_Connection::Jane_stop_this_crazy_thing
void Jane_stop_this_crazy_thing(vrpn_uint32 stop_looking_after)
This function should be seldom used. It is here for the case of the vrpn_Imager, whose servers do not...
Definition: vrpn_Connection.h:638
cName
char cName[100]
Length of names within VRPN.
Definition: vrpn_Connection.h:158
vrpnLogFilterEntry
Definition: vrpn_Connection.h:181
vrpn_Endpoint_IP::d_tcpListenSocket
SOCKET d_tcpListenSocket
This section deals with when a client connection is trying to establish (or re-establish) a connectio...
Definition: vrpn_Connection.h:452
vrpn_noint_select
int VRPN_API vrpn_noint_select(int width, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
This routine will perform like a normal select() call, but it will restart if it quit because of an i...
Definition: vrpn_Connection.C:1615
SOCKET
#define SOCKET
Definition: vrpn_Shared.h:46
vrpnLogFilterEntry::userdata
void * userdata
passed along
Definition: vrpn_Connection.h:183
vrpn_Endpoint_IP::d_udpBuflen
vrpn_int32 d_udpBuflen
Definition: vrpn_Connection.h:487
vrpnMsgCallbackEntry::next
vrpnMsgCallbackEntry * next
Next handler.
Definition: vrpn_Connection.h:178
vrpn_Connection::send_pending_reports
virtual int send_pending_reports(void)=0
send pending report, clear the buffer. This function was protected, now is public,...
vrpn_Connection_IP::d_stop_processing_messages_after
vrpn_uint32 d_stop_processing_messages_after
If this value is greater than zero, the connection should stop looking for new messages on a given en...
Definition: vrpn_Connection.h:820
vrpn_Endpoint_IP::d_remote_port_number
int d_remote_port_number
Port to connect to on remote machine.
Definition: vrpn_Connection.h:463
vrpnMsgCallbackEntry::sender
vrpn_int32 sender
Only if from sender.
Definition: vrpn_Connection.h:177
vrpn_Connection_IP
Definition: vrpn_Connection.h:765
vrpn_Configure.h
vrpn_HANDLERPARAM::sender
vrpn_int32 sender
Definition: vrpn_Connection.h:46
vrpnMsgCallbackEntry::userdata
void * userdata
Passed along.
Definition: vrpn_Connection.h:176
vrpn_Endpoint::d_senders
vrpn_TranslationTable * d_senders
Definition: vrpn_Connection.h:352
vrpn_set_service_name
char * vrpn_set_service_name(const char *specifier, const char *newServiceName)
Utility routine to rename the service name of a given host specifier.
Definition: vrpn_Connection.C:6541
vrpn_Endpoint::status
int status
Definition: vrpn_Connection.h:284
vrpn_CONNECTION_FIXED_LATENCY
const vrpn_uint32 vrpn_CONNECTION_FIXED_LATENCY
Definition: vrpn_Connection.h:121
vrpn_Connection_Loopback
Constructor for a Loopback connection that will basically just pass messages between objects that are...
Definition: vrpn_Connection.h:874
check_vrpn_cookie
VRPN_API int check_vrpn_cookie(const char *buffer)
Checks the buffer to see if it is a valid VRPN header cookie. Returns -1 on total mismatch,...
Definition: vrpn_Connection.C:2557
vrpn_Endpoint_IP::d_tcpListenPort
int d_tcpListenPort
Socket and port that the client listens on when lobbing datagrams at the server and waiting for it to...
Definition: vrpn_Connection.h:453
vrpn_CONNECTION_SENDER_DESCRIPTION
const vrpn_int32 vrpn_CONNECTION_SENDER_DESCRIPTION
Definition: vrpn_Connection.h:106
vrpn_Endpoint::d_dispatcher
vrpn_TypeDispatcher * d_dispatcher
Definition: vrpn_Connection.h:355
CONNECTED
@ CONNECTED
Definition: vrpn_Connection.h:30
vrpn_Connection_IP::listen_udp_sock
SOCKET listen_udp_sock
UDP Connect requests come here.
Definition: vrpn_Connection.h:835
VRPN_API
#define VRPN_API
Definition: vrpn_Configure.h:646
vrpn_Log
Definition: vrpn_Log.h:10
vrpn_Endpoint_IP::d_udpNumOut
vrpn_int32 d_udpNumOut
Definition: vrpn_Connection.h:489