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