kopia lustrzana https://github.com/Hamlib/Hamlib
deprecated, by Perl binding
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@986 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.1.3
rodzic
b9d94c3195
commit
1bb7fe2297
|
@ -1,128 +0,0 @@
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// File:
|
|
||||||
// CGILib.cpp
|
|
||||||
// Package:
|
|
||||||
// CGILib
|
|
||||||
// Author:
|
|
||||||
// Ignacio A. Macías <mack@las.es>
|
|
||||||
// Description:
|
|
||||||
// Body of the methods defined in "CGILib.h".
|
|
||||||
// Tested: GCC 2.7.2
|
|
||||||
// Tested: MS Visual C++ 4.0
|
|
||||||
// Support:
|
|
||||||
// Please contact <mack@las.es> if you've any problem.
|
|
||||||
// Version:
|
|
||||||
// v1.0 Nov 4 1996 - Main algorithms.
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
# include <stdlib.h>
|
|
||||||
# include <string.h>
|
|
||||||
# include <ctype.h>
|
|
||||||
|
|
||||||
# include "CGILib.h"
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
void CGIParser::parse() throw (CGIException)
|
|
||||||
{
|
|
||||||
type = getEnv("REQUEST_METHOD");
|
|
||||||
|
|
||||||
if (!type.length())
|
|
||||||
throw CGIException("Invalid request method");
|
|
||||||
|
|
||||||
if (type == "POST")
|
|
||||||
// Must read data from cin.
|
|
||||||
{
|
|
||||||
string conLen(getEnv("CONTENT_LENGTH"));
|
|
||||||
// EOF is not present. Need the length of the data.
|
|
||||||
if (!conLen.length())
|
|
||||||
throw CGIException("Invalid content length");
|
|
||||||
|
|
||||||
int length = atoi(conLen.c_str());
|
|
||||||
char *buffer = new char[length + 1];
|
|
||||||
|
|
||||||
if (length > 0)
|
|
||||||
{
|
|
||||||
cin.read(buffer,length);
|
|
||||||
if (cin.bad())
|
|
||||||
throw CGIException("Error reading in POST");
|
|
||||||
}
|
|
||||||
buffer[length] = 0;
|
|
||||||
// Mark the end of the string.
|
|
||||||
text = buffer;
|
|
||||||
// Preserve.
|
|
||||||
delete buffer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (type == "GET")
|
|
||||||
text = getEnv("QUERY_STRING");
|
|
||||||
// The data is obtained from the environment.
|
|
||||||
else
|
|
||||||
throw CGIException("Unknown Request Method");
|
|
||||||
|
|
||||||
size_t ini, end, equ;
|
|
||||||
|
|
||||||
if (text.find_first_of("&=",0) == string::npos)
|
|
||||||
type = "ISINDEX";
|
|
||||||
// ISINDEX queries do not have pairs name-value.
|
|
||||||
else
|
|
||||||
// Parses & decodes the string in pairs name-value.
|
|
||||||
// ONLY standard requests are handled properly.
|
|
||||||
for ( ini = 0, end = string::npos - 1 ; end != string::npos ; ini = end + 1)
|
|
||||||
{
|
|
||||||
end = text.find_first_of('&',ini);
|
|
||||||
equ = text.find_first_of('=',ini);
|
|
||||||
data[decode(text.substr(ini, equ - ini))]
|
|
||||||
= decode(text.substr(equ + 1, end - equ - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
text = decode(text);
|
|
||||||
// Decodes the global text.
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Translates the urlencoded string.
|
|
||||||
|
|
||||||
string CGIParser::decode(const string &cod) const
|
|
||||||
{
|
|
||||||
string dec = cod;
|
|
||||||
// Buffer.
|
|
||||||
register unsigned int get;
|
|
||||||
// Origin index.
|
|
||||||
register unsigned int set;
|
|
||||||
// Target index.
|
|
||||||
|
|
||||||
for (get = 0, set = 0 ; get < dec.length() ; set++, get++)
|
|
||||||
if (dec[get] == '+')
|
|
||||||
dec[set] = ' ';
|
|
||||||
// Pluses in spaces.
|
|
||||||
else
|
|
||||||
if (dec[get] == '%')
|
|
||||||
{
|
|
||||||
dec[set] = hexToChar(dec[get + 1], dec[get + 2]);
|
|
||||||
get += 2;
|
|
||||||
}
|
|
||||||
// Hex values in their represented char.
|
|
||||||
else
|
|
||||||
dec[set] = dec[get];
|
|
||||||
dec.resize(set);
|
|
||||||
// Cut the rest of the buffer.
|
|
||||||
return dec;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Translates a two-char hex representation in his corresponding value.
|
|
||||||
|
|
||||||
char CGIParser::hexToChar(char c1, char c2) const
|
|
||||||
{
|
|
||||||
c1 = tolower(c1);
|
|
||||||
c2 = tolower(c2);
|
|
||||||
// Some browsers/servers send uppercase values.
|
|
||||||
return ((c2 < 'a')? c2 - '0' : c2 - 'a' + 10) +
|
|
||||||
((c1 < 'a')? c1 - '0' : c1 - 'a' + 10) * 16;
|
|
||||||
}
|
|
||||||
|
|
131
cgirig/CGILib.h
131
cgirig/CGILib.h
|
@ -1,131 +0,0 @@
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// File:
|
|
||||||
// CGILib.h
|
|
||||||
// Package:
|
|
||||||
// CGILib
|
|
||||||
// Author:
|
|
||||||
// Ignacio A. Macías <mack@las.es>
|
|
||||||
// Description:
|
|
||||||
// File header of the CGILib utils. For a description of the use
|
|
||||||
// of the CGILib library, please browse the "CGILib.html" file.
|
|
||||||
// Tested: GCC 2.7.2
|
|
||||||
// Tested: MS Visual C++ 4.0
|
|
||||||
// Support:
|
|
||||||
// Please contact <mack@las.es> if you've any problem.
|
|
||||||
// Version:
|
|
||||||
// v1.0 Nov 4 1996 - Main algorithms.
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
# ifndef CGILIB_H
|
|
||||||
# define CGILIB_H
|
|
||||||
|
|
||||||
# include <string>
|
|
||||||
|
|
||||||
# include <map.h>
|
|
||||||
|
|
||||||
typedef less<string> order;
|
|
||||||
// MSVC++ 4.0 can't handle a direct mapping.
|
|
||||||
typedef map<string, string, order> CGIData;
|
|
||||||
// CGIData is a STL map which associates the names
|
|
||||||
// of the form inputs with the user selected values.
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// This exception is throwed by the CGILib on any error condition. The text
|
|
||||||
// contains the description of the problem.
|
|
||||||
|
|
||||||
class CGIException
|
|
||||||
{
|
|
||||||
string text;
|
|
||||||
public:
|
|
||||||
CGIException(const char *cstr);
|
|
||||||
string getText() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// This is the main class. When called the "parse()" method, the cgi data
|
|
||||||
// received from the http server is analyzed and is ready for handling with the
|
|
||||||
// observer functions.
|
|
||||||
|
|
||||||
class CGIParser
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
string text;
|
|
||||||
// Source text obtained from the server.
|
|
||||||
string type;
|
|
||||||
// Type of transaction: "GET", "POST" or "ISINDEX".
|
|
||||||
CGIData data;
|
|
||||||
// Map which associates names and values.
|
|
||||||
public:
|
|
||||||
void parse() throw (CGIException);
|
|
||||||
// Parses and decodes the CGI transaction.
|
|
||||||
string getText() const;
|
|
||||||
// Returns the transaction's complete text.
|
|
||||||
string getType() const;
|
|
||||||
// Returns the type of transaction. See above.
|
|
||||||
CGIData getData() const;
|
|
||||||
// Returns the parsed data;
|
|
||||||
string getEnv(const char *var) const;
|
|
||||||
// Receives the name of an environment variable and
|
|
||||||
// returns her value as a string. If the variable is
|
|
||||||
// not defined, an empty string is defined.
|
|
||||||
private:
|
|
||||||
string decode(const string &str) const;
|
|
||||||
// Decodes the form text.
|
|
||||||
char hexToChar(char c1, char c2) const;
|
|
||||||
// Obtains hte char represented by the hex. value c1c2.
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Constructor of the global exception. Receives the text describing the error.
|
|
||||||
|
|
||||||
inline CGIException::CGIException(const char *cstr)
|
|
||||||
: text(cstr)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Obtains the text of the exception catched.
|
|
||||||
|
|
||||||
inline string CGIException::getText() const
|
|
||||||
{
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
inline string CGIParser::getText() const
|
|
||||||
{
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline string CGIParser::getType() const
|
|
||||||
{
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline CGIData CGIParser::getData() const
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline string CGIParser::getEnv(const char *var) const
|
|
||||||
{
|
|
||||||
char *aux = getenv(var);
|
|
||||||
return (aux)? string(aux) : string();
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
# endif
|
|
|
@ -1,52 +0,0 @@
|
||||||
#include "RpcRigClient.h"
|
|
||||||
|
|
||||||
RpcRigClient::RpcRigClient( const char* hostname ) {
|
|
||||||
|
|
||||||
pClient = clnt_create( hostname, RIGPROG, RIGVERS, "udp" );
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
RpcRigClient::~RpcRigClient() {
|
|
||||||
|
|
||||||
if( pClient ) clnt_destroy( pClient );
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const rig_model_t RpcRigClient::getModel() const {
|
|
||||||
|
|
||||||
rig_model_t result = 0;
|
|
||||||
if( pClient ) {
|
|
||||||
model_x* pResult = getmodel_1( pClient );
|
|
||||||
if( pResult ) {
|
|
||||||
result = *pResult;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const freq_t RpcRigClient::getFrequency() const {
|
|
||||||
|
|
||||||
freq_t result = 0;
|
|
||||||
if( pClient ) {
|
|
||||||
freq_res* pResult = getfreq_1( RIG_VFO1, pClient );
|
|
||||||
if( pResult ) {
|
|
||||||
result = pResult->freq_res_u.freq.f1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void RpcRigClient::setFrequency( const freq_t freq ) {
|
|
||||||
|
|
||||||
if( pClient ) {
|
|
||||||
freq_arg f;
|
|
||||||
f.vfo = RIG_VFO1;
|
|
||||||
f.freq.f1 = freq;
|
|
||||||
f.freq.f2 = 0;
|
|
||||||
setfreq_1( f, pClient );
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
#ifndef __RPCRIGCLIENT_H__
|
|
||||||
#define __RPCRIGCLIENT_H__
|
|
||||||
|
|
||||||
#include "hamlib/rig.h"
|
|
||||||
#include "rpcrig.h"
|
|
||||||
|
|
||||||
class RpcRigClient {
|
|
||||||
public:
|
|
||||||
RpcRigClient( const char* hostname );
|
|
||||||
virtual ~RpcRigClient();
|
|
||||||
const rig_model_t getModel() const;
|
|
||||||
const freq_t getFrequency() const;
|
|
||||||
void setFrequency( const freq_t freq );
|
|
||||||
|
|
||||||
private:
|
|
||||||
CLIENT* pClient;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // __RPCRIGCLIENT_H__
|
|
|
@ -1,30 +0,0 @@
|
||||||
#include "RpcRigClient.h"
|
|
||||||
#include "stdio.h"
|
|
||||||
#include "CGILib.h"
|
|
||||||
|
|
||||||
main( int argv, char** argc )
|
|
||||||
{
|
|
||||||
freq_t freq = 0;
|
|
||||||
RpcRigClient rig( "localhost" );
|
|
||||||
|
|
||||||
CGIParser parser;
|
|
||||||
parser.parse();
|
|
||||||
CGIData data = parser.getData();
|
|
||||||
|
|
||||||
if( data["freq"] != string( "" ) )
|
|
||||||
{
|
|
||||||
freq = atoi( data["freq"].c_str() );
|
|
||||||
rig.setFrequency( freq );
|
|
||||||
};
|
|
||||||
|
|
||||||
freq = rig.getFrequency();
|
|
||||||
|
|
||||||
printf( "Content-type: text/html\r\n\r\n" );
|
|
||||||
printf( "<html><head><title>hamlib cgirig</title></head><body>" );
|
|
||||||
printf( "<form method=\"get\" action=\"cgirig\">\n" );
|
|
||||||
printf( "The frequency is " );
|
|
||||||
printf( "<input type=\"text\" name=\"freq\" size=\"15\" value=\"%d\"> Hz \n", freq );
|
|
||||||
printf( "<input type=\"submit\" value=\"Tune\">\n" );
|
|
||||||
printf( "</form>\n" );
|
|
||||||
printf( "</body></html>" );
|
|
||||||
}
|
|
Ładowanie…
Reference in New Issue