mirror of
https://github.com/nasa/trick.git
synced 2024-12-18 20:57:55 +00:00
Add capability to list current variable server connections in JSON re… (#732)
* Add capability to list current variable server connections in JSON ref #678 * Add client tag to the connection info. * Name consistency tweak in generation of JSON variable-server connection list. ref #732 * Add client IP address and port. ref #732 * Output should be going to the stringstream, not std::cout. Ref #732
This commit is contained in:
parent
a2cee328d2
commit
b9278c4a72
@ -10,6 +10,7 @@
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <pthread.h>
|
||||
#include "trick/tc.h"
|
||||
#include "trick/reference.h"
|
||||
@ -39,6 +40,11 @@ namespace Trick {
|
||||
*/
|
||||
~VariableServer() ;
|
||||
|
||||
/**
|
||||
@brief Write a JSON encoded list of Variable Server Connections to the given stream.
|
||||
*/
|
||||
friend std::ostream& operator<< (std::ostream& s, Trick::VariableServer& vs);
|
||||
|
||||
/**
|
||||
@brief Set up the listen port during default_data so it is available at the start of initialization.
|
||||
*/
|
||||
|
@ -6,6 +6,7 @@
|
||||
#ifndef VARIABLESERVERREFERENCE_HH
|
||||
#define VARIABLESERVERREFERENCE_HH
|
||||
|
||||
#include <iostream>
|
||||
#include "trick/reference.h"
|
||||
|
||||
union cv_converter ;
|
||||
@ -24,6 +25,8 @@ namespace Trick {
|
||||
VariableReference(REF2 * in_ref) ;
|
||||
~VariableReference() ;
|
||||
|
||||
friend std::ostream& operator<< (std::ostream& s, const Trick::VariableReference& vref);
|
||||
|
||||
/** Pointer to trick variable reference structure.\n */
|
||||
REF2 * ref ;
|
||||
cv_converter * conversion_factor ; // ** udunits conversion factor
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <pthread.h>
|
||||
#include "trick/tc.h"
|
||||
#include "trick/ThreadBase.hh"
|
||||
@ -27,6 +28,8 @@ namespace Trick {
|
||||
public:
|
||||
enum ConnectionType { TCP, UDP, MCAST } ;
|
||||
|
||||
friend std::ostream& operator<< (std::ostream& s, Trick::VariableServerThread& vst);
|
||||
|
||||
/**
|
||||
@brief Constructor.
|
||||
@param listen_dev - the TCDevice set up in listen()
|
||||
|
@ -6,6 +6,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void var_server_list_connections(void);
|
||||
const char * var_server_get_hostname(void) ;
|
||||
|
||||
unsigned short var_server_get_port(void) ;
|
||||
|
@ -63,6 +63,16 @@ Trick::VariableReference::VariableReference(REF2 * in_ref ) {
|
||||
|
||||
}
|
||||
|
||||
std::ostream& Trick::operator<< (std::ostream& s, const Trick::VariableReference& vref) {
|
||||
|
||||
if (vref.ref->reference != NULL) {
|
||||
s << " \"" << vref.ref->reference << "\"";
|
||||
} else {
|
||||
s<< " null";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
Trick::VariableReference::~VariableReference() {
|
||||
free(ref) ;
|
||||
free(buffer_in) ;
|
||||
|
@ -1,5 +1,6 @@
|
||||
|
||||
#include <netdb.h>
|
||||
#include <iostream>
|
||||
#include "trick/VariableServer.hh"
|
||||
#include "trick/tc_proto.h"
|
||||
|
||||
@ -17,6 +18,26 @@ Trick::VariableServer::VariableServer() :
|
||||
Trick::VariableServer::~VariableServer() {
|
||||
}
|
||||
|
||||
std::ostream& Trick::operator<< (std::ostream& s, Trick::VariableServer& vs) {
|
||||
std::map < pthread_t , VariableServerThread * >::iterator it ;
|
||||
|
||||
std::cout << "{\"variable-server-connections\":[" << std::endl;
|
||||
int count = 0;
|
||||
int n_connections = (int)vs.var_server_threads.size();
|
||||
for ( it = vs.var_server_threads.begin() ; it != vs.var_server_threads.end() ; it++ ) {
|
||||
s << "{" << std::endl;
|
||||
s << *(*it).second;
|
||||
s << "}";
|
||||
if ((n_connections-count)>1) {
|
||||
std::cout << "," ;
|
||||
}
|
||||
s << std::endl;
|
||||
count ++;
|
||||
}
|
||||
s << "]}" << std::endl;
|
||||
return s;
|
||||
}
|
||||
|
||||
bool Trick::VariableServer::get_enabled() {
|
||||
return enabled ;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <stdlib.h>
|
||||
#include "trick/VariableServerThread.hh"
|
||||
#include "trick/exec_proto.h"
|
||||
@ -63,6 +64,50 @@ Trick::VariableServerThread::~VariableServerThread() {
|
||||
free( stripped_msg ) ;
|
||||
}
|
||||
|
||||
|
||||
std::ostream& Trick::operator<< (std::ostream& s, Trick::VariableServerThread& vst) {
|
||||
|
||||
std::vector <Trick::VariableReference *>::iterator it;
|
||||
|
||||
struct sockaddr_in otherside;
|
||||
socklen_t len = (socklen_t)sizeof(otherside);
|
||||
|
||||
s << " \"connection\":{" << std::endl;
|
||||
s << " \"client-tag\":\"" << vst.connection.client_tag << "\"," << std::endl;
|
||||
|
||||
int err = getpeername(vst.connection.socket, (struct sockaddr*)&otherside, &len);
|
||||
|
||||
if (err == 0) {
|
||||
s << " \"client-IP-address\":\"" << inet_ntoa(otherside.sin_addr) << "\"," << std::endl;
|
||||
s << " \"client-port\":\"" << ntohs(otherside.sin_port) << "\"," << std::endl;
|
||||
} else {
|
||||
s << " \"client-IP-address\":\"unknown\"," << std::endl;
|
||||
s << " \"client-port\":\"unknown\"," << std::endl;
|
||||
}
|
||||
|
||||
if (vst.binary_data) {
|
||||
s << " \"format\":\"BINARY\",";
|
||||
} else {
|
||||
s << " \"format\":\"ASCII\",";
|
||||
}
|
||||
s << std::endl;
|
||||
s << " \"update-rate\":" << vst.update_rate << "," << std::endl;
|
||||
|
||||
s << " \"variables\":[" << std::endl;
|
||||
|
||||
int n_vars = (int)vst.vars.size();
|
||||
for (int i=0 ; i<n_vars ; i++) {
|
||||
s << *(vst.vars[i]);
|
||||
if ((n_vars-i)>1) {
|
||||
s << "," ;
|
||||
}
|
||||
s << std::endl;
|
||||
}
|
||||
s << " ]" << std::endl;
|
||||
s << " }" << std::endl;
|
||||
return s;
|
||||
}
|
||||
|
||||
void Trick::VariableServerThread::set_vs_ptr(Trick::VariableServer * in_vs) {
|
||||
vs = in_vs ;
|
||||
}
|
||||
|
@ -387,6 +387,10 @@ Trick::VariableServer * var_server_get_var_server() {
|
||||
return the_vs ;
|
||||
}
|
||||
|
||||
extern "C" void var_server_list_connections(void) {
|
||||
std::cout << *the_vs << std::endl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @relates Trick::VariableServer
|
||||
* @copydoc Trick::VariableServer::get_hostname
|
||||
|
Loading…
Reference in New Issue
Block a user