mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-16 11:24:24 -05:00
87344de7d4
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1850 b45a01b8-16f6-495d-af2f-9b41ad6348cc
252 lines
7.9 KiB
C++
252 lines
7.9 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2008 by normal *
|
|
* normal@Desktop2 *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 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 General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
#include "I2PSamMessageAnalyser.h"
|
|
|
|
I2PSamMessageAnalyser::I2PSamMessageAnalyser()
|
|
{
|
|
//Constructor
|
|
}
|
|
|
|
const SAM_MESSAGE I2PSamMessageAnalyser::Analyse(QString Message)
|
|
{
|
|
using namespace SAM_Message_Types;
|
|
|
|
SAM_MESSAGE t;
|
|
QStringList list =Message.split(" ",QString::SkipEmptyParts);
|
|
|
|
|
|
if((list[0]=="STREAM") && (list[1]=="RECEIVED")){
|
|
t.type=STREAM_RECEIVED;
|
|
|
|
//get ID
|
|
QStringList temp=list[2].split("=");
|
|
QString sID=temp[1];
|
|
|
|
|
|
t.ID=QStringToQint32(sID);
|
|
//get Size
|
|
temp= list[3].split("=");
|
|
t.Size=temp[1].remove("\n");
|
|
}
|
|
else if((list[0].contains("STREAM")==true) && (list[1].contains("READY_TO_SEND")==true)){
|
|
t.type=STREAM_READY_TO_SEND;
|
|
|
|
//GET ID
|
|
QStringList temp=list[2].split("=");
|
|
QString sID=temp[1].remove("\n");
|
|
|
|
t.ID=QStringToQint32(sID);
|
|
}
|
|
else if((list[0]=="HELLO") && (list[1]=="REPLY")){
|
|
t.type=HELLO_REPLAY;
|
|
|
|
if(list[2].contains("RESULT=OK")==true) t.result=OK;
|
|
else if(list[2].contains("RESULT=NOVERSION")==true)t.result=NOVERSION;
|
|
|
|
}
|
|
else if((list[0].contains("SESSION")==true) && (list[1].contains("STATUS")==true)){
|
|
t.type=SESSION_STATUS;
|
|
|
|
//Get Result
|
|
if(list[2].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[2].contains("RESULT=DUPLICATED_DEST",Qt::CaseInsensitive))t.result=DUPLICATED_DEST;
|
|
else if(list[2].contains("RESULT=I2P_ERROR",Qt::CaseInsensitive))t.result=I2P_ERROR;
|
|
else if(list[2].contains("RESULT=INVALID_KEY",Qt::CaseInsensitive))t.result=INVALID_KEY;
|
|
else
|
|
t.type=ERROR_IN_ANALYSE;
|
|
//----------------
|
|
|
|
|
|
//Get Destination
|
|
QStringList temp=list[3].split("=");
|
|
|
|
t.Destination=temp[1].remove("\n");
|
|
//----------------
|
|
//Get Message
|
|
if(Message.contains("MESSAGE=",Qt::CaseInsensitive)){
|
|
t.Message=Message.mid(Message.indexOf("MESSAGE=")+8);
|
|
t.Message.remove("\n");
|
|
}
|
|
|
|
//----------------
|
|
|
|
}
|
|
else if((list[0].contains("STREAM")==true) && (list[1].contains("STATUS")==true)){
|
|
t.type=STREAM_STATUS;
|
|
|
|
//Get Result
|
|
if(list[2].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[2].contains("RESULT=CANT_REACH_PEER",Qt::CaseInsensitive))t.result=CANT_REACH_PEER;
|
|
else if(list[2].contains("RESULT=I2P_ERROR",Qt::CaseInsensitive))t.result=I2P_ERROR;
|
|
else if(list[2].contains("RESULT=INVALID_KEY",Qt::CaseInsensitive))t.result=INVALID_KEY;
|
|
else if(list[2].contains("RESULT=TIMEOUT",Qt::CaseInsensitive))t.result=TIMEOUT;
|
|
else
|
|
{
|
|
t.type=ERROR_IN_ANALYSE;
|
|
return t;
|
|
}
|
|
|
|
//----------------
|
|
//Get ID
|
|
QStringList temp=list[3].split("=");
|
|
QString sID=temp[1].remove("\n");
|
|
|
|
t.ID=QStringToQint32(sID);
|
|
//----------------
|
|
//Get Message
|
|
if(Message.contains("MESSAGE=",Qt::CaseInsensitive)){
|
|
t.Message=Message.mid(Message.indexOf("MESSAGE=")+8);
|
|
t.Message.remove("\n");
|
|
}
|
|
//----------------
|
|
|
|
}
|
|
else if((list[0].contains("STREAM")==true) && (list[1].contains("CONNECTED")==true)){
|
|
t.type=STREAM_CONNECTED;
|
|
|
|
QStringList temp=list[2].split("=");
|
|
QString sID;
|
|
t.Destination=temp[1];
|
|
|
|
temp=list[3].split("=");
|
|
sID=temp[1].remove("\n");
|
|
|
|
t.ID=QStringToQint32(sID);
|
|
|
|
}
|
|
else if((list[0].contains("STREAM")==true) && (list[1].contains("SEND")==true)){
|
|
t.type=STREAM_SEND;
|
|
|
|
//get ID
|
|
QStringList temp=list[2].split("=");
|
|
QString sID=temp[1];
|
|
t.ID=QStringToQint32(sID);
|
|
|
|
//Get Result
|
|
if(list[3].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[2].contains("RESULT=FAILED",Qt::CaseInsensitive))t.result=FAILED;
|
|
|
|
//get STATE
|
|
if(list[4].contains("STATE=BUFFER_FULL",Qt::CaseInsensitive))t.state=BUFFER_FULL;
|
|
else if(list[4].contains("STATE=READY",Qt::CaseInsensitive))t.state=READY;
|
|
|
|
}
|
|
else if((list[0].contains("STREAM")==true) && (list[1].contains("CLOSED")==true)){
|
|
t.type=STREAM_CLOSED;
|
|
|
|
//Get RESULT
|
|
if(list[2].contains("RESULT",Qt::CaseInsensitive))
|
|
{
|
|
|
|
if(list[2].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[2].contains("RESULT=CANT_REACH_PEER",Qt::CaseInsensitive))t.result=CANT_REACH_PEER;
|
|
else if(list[2].contains("RESULT=I2P_ERROR",Qt::CaseInsensitive))t.result=I2P_ERROR;
|
|
else if(list[2].contains("RESULT=PEER_NOT_FOUND",Qt::CaseInsensitive))t.result=PEER_NOT_FOUND;
|
|
else if(list[2].contains("RESULT=TIMEOUT",Qt::CaseInsensitive))t.result=TIMEOUT;
|
|
else{
|
|
t.type=ERROR_IN_ANALYSE;
|
|
return t;
|
|
}
|
|
|
|
//Get ID
|
|
QStringList temp=list[3].split("=");
|
|
QString sID=temp[1];
|
|
t.ID=QStringToQint32(sID);
|
|
}
|
|
else
|
|
{
|
|
if(list[3].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[3].contains("RESULT=CANT_REACH_PEER",Qt::CaseInsensitive))t.result=CANT_REACH_PEER;
|
|
else if(list[3].contains("RESULT=I2P_ERROR",Qt::CaseInsensitive))t.result=I2P_ERROR;
|
|
else if(list[3].contains("RESULT=PEER_NOT_FOUND",Qt::CaseInsensitive))t.result=PEER_NOT_FOUND;
|
|
else if(list[3].contains("RESULT=TIMEOUT",Qt::CaseInsensitive))t.result=TIMEOUT;
|
|
else{
|
|
t.type=ERROR_IN_ANALYSE;
|
|
return t;
|
|
}
|
|
|
|
//Get ID
|
|
QStringList temp=list[2].split("=");
|
|
QString sID=temp[1];
|
|
|
|
t.ID=QStringToQint32(sID);
|
|
|
|
}
|
|
|
|
//----------------
|
|
//Get Message
|
|
if(Message.contains("MESSAGE=",Qt::CaseInsensitive)){
|
|
t.Message=Message.mid(Message.indexOf("MESSAGE=")+8);
|
|
t.Message.remove("\n");
|
|
}
|
|
//----------------
|
|
}
|
|
else if((list[0].contains("NAMING")==true) && (list[1].contains("REPLY")==true)){
|
|
t.type=NAMING_REPLY;
|
|
|
|
//get Result
|
|
if(list[2].contains("RESULT=OK",Qt::CaseInsensitive))t.result=OK;
|
|
else if(list[2].contains("RESULT=INVALID_KEY",Qt::CaseInsensitive))t.result=INVALID_KEY;
|
|
else if(list[2].contains("RESULT=KEY_NOT_FOUND",Qt::CaseInsensitive))t.result=KEY_NOT_FOUND;
|
|
else{
|
|
t.type=ERROR_IN_ANALYSE;
|
|
return t;
|
|
}
|
|
//get Name
|
|
QStringList temp=list[3].split("=");
|
|
t.Name=temp[1].remove("\n");
|
|
|
|
//get Value
|
|
if(list.count()-1>=4){
|
|
QStringList temp=list[4].split("=");
|
|
t.Value=temp[1].remove("\n");
|
|
}
|
|
//Get Message
|
|
if(Message.contains("MESSAGE=",Qt::CaseInsensitive)){
|
|
t.Message=Message.mid(Message.indexOf("MESSAGE=")+8);
|
|
t.Message.remove("\n");
|
|
}
|
|
}
|
|
else{
|
|
t.type=ERROR_IN_ANALYSE;
|
|
}
|
|
|
|
return t;
|
|
}
|
|
|
|
qint32 I2PSamMessageAnalyser::QStringToQint32(QString value)
|
|
{
|
|
bool OK=false;
|
|
qint32 iValue =value.toInt ( &OK,10 );
|
|
|
|
if(OK==false)
|
|
{
|
|
QMessageBox msgBox;
|
|
msgBox.setIcon(QMessageBox::Warning);
|
|
msgBox.setText("I2PSamMessageAnalyser");
|
|
msgBox.setInformativeText("cant parse value: "+value );
|
|
msgBox.setStandardButtons(QMessageBox::Ok);
|
|
msgBox.setDefaultButton(QMessageBox::Ok);
|
|
msgBox.exec();
|
|
}
|
|
return iValue;
|
|
}
|
|
|