laforge
/
openbts-osmo
Archived
1
0
Fork 0
This repository has been archived on 2022-03-30. You can view files and clone it, but cannot push or open issues/pull-requests.
openbts-osmo/public-trunk/RRLP/RRLPMessages.cpp

123 lines
3.6 KiB
C++

/*
* Copyright 2008, 2009 Free Software Foundation, Inc.
*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
* This software is distributed under the terms of the GNU Affero Public License.
* See the COPYING file in the main directory for details.
*
* This use of this software may be subject to additional restrictions.
* See the LEGAL file in the main directory for details.
*/
#include <cstdio>
#include <vector>
#include "RRLPMessages.h"
#include <GSML3RRMessages.h>
#include <Logger.h>
using namespace std;
using namespace GSM;
using namespace RRLP;
////////////////////////////////////////////////////////////////////////////////
// High Level Interface
bool RRLP::RRLPQuery(GSM::LogicalChannel* chan)
{
//static const char init_request_msbased_gps[4] = {'\x40', '\x01', '\x78', '\x98'};
static const char init_request_msbased_gps[4] = {'\x40', '\x01', '\x78', '\xA8'};
static vector<char> request_msbased_gps(init_request_msbased_gps,
init_request_msbased_gps + sizeof(init_request_msbased_gps));
/*
Request a GPS MS Based position in maximum 2 seconds with accuracy 60, a single result
expected.
PER:
rrr e ccc e ooooo O mm aaaaaaa pp mmm u ___
010 0 000 0 00000 0 01 0111100 01 001 1 000
4017898
XER:
<PDU>
<referenceNumber>2</referenceNumber>
<component>
<msrPositionReq>
<positionInstruct>
<methodType>
<msBased>60</msBased>
</methodType>
<positionMethod><gps/></positionMethod>
<measureResponseTime>1</measureResponseTime>
<useMultipleSets><oneSet/></useMultipleSets>
</positionInstruct>
</msrPositionReq>
</component>
</PDU>
*/
LOG(INFO) << "RRLPQuery about to be sent";
chan->send(L3ApplicationInformation(request_msbased_gps));
// Receive an L3 frame with a timeout. Timeout is RRLP max + 1 second.
LOG(INFO) << "RRLPQuery sent";
L3Frame* resp = chan->recv(10000);
LOG(INFO) << "RRLPQuery recv returned";
if (!resp) {
LOG(INFO) << "RRLPQuery timed out";
return false;
}
// FIXME -- Actually parse the response.
if (resp) { LOG(INFO) << "RRLPQuery returned " << *resp; }
delete resp;
return true;
}
////////////////////////////////////////////////////////////////////////////////
// RRLPMessage implementation
// write
// parse
// uper_encode(&asn_DEF_PDU, rrlp, write_out, stdout);
void RRLPMessage::parse( const GSM::L3Frame& frame ) {
// TODO - read the APDU, Then just dump it for the moment.
// not using asn1c (to quote someone, "Yikes!!!")
}
void RRLPMessage::write( GSM::L3Frame& frame ) const
{
// TODO - write the PDU_t using the uper encoder, and then
// write into the frame using the BitVector API
}
void RRLPMessage::text(std::ostream& os) const
{
os << "RefNum=(" << mReferenceNumber << ")\n";
// TODO - call the xer print or something.
//os << "Component=(" << mComponent << ")\n";
}
// vim: ts=4 sw=4