mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-29 11:01:22 -04:00
added first brand of chat/msg link creator/editor. Not functional yet
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-GenericTunneling@6304 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d0703df7e3
commit
9e8b9b6c05
8 changed files with 494 additions and 57 deletions
|
@ -55,7 +55,9 @@
|
|||
#define HOST_MESSAGE "message"
|
||||
#define HOST_SEARCH "search"
|
||||
#define HOST_CERTIFICATE "certificate"
|
||||
#define HOST_REGEXP "file|person|forum|channel|search|message|certificate"
|
||||
#define HOST_PUBLIC_MSG "public_msg"
|
||||
#define HOST_PRIVATE_CHAT "private_chat"
|
||||
#define HOST_REGEXP "file|person|forum|channel|search|message|certificate|private_chat|public_msg"
|
||||
|
||||
#define FILE_NAME "name"
|
||||
#define FILE_SIZE "size"
|
||||
|
@ -87,6 +89,13 @@
|
|||
#define CERTIFICATE_EXT_IPPORT "extipp"
|
||||
#define CERTIFICATE_LOC_IPPORT "locipp"
|
||||
|
||||
#define PRIVATE_CHAT_TIME_STAMP "time_stamp"
|
||||
#define PRIVATE_CHAT_STRING "encrypted_data"
|
||||
|
||||
#define PUBLIC_MSG_TIME_STAMP "time_stamp"
|
||||
#define PUBLIC_MSG_SRC_PGP_ID "gpgid"
|
||||
#define PUBLIC_MSG_HASH "hash"
|
||||
|
||||
RetroShareLink::RetroShareLink(const QUrl& url)
|
||||
{
|
||||
fromUrl(url);
|
||||
|
@ -181,6 +190,28 @@ void RetroShareLink::fromUrl(const QUrl& url)
|
|||
}
|
||||
}
|
||||
|
||||
if(url.host() == HOST_PRIVATE_CHAT)
|
||||
{
|
||||
bool ok ;
|
||||
_type = TYPE_PRIVATE_CHAT ;
|
||||
_time_stamp = url.queryItemValue(PRIVATE_CHAT_TIME_STAMP).toUInt(&ok) ;
|
||||
_encrypted_chat_info = url.queryItemValue(PRIVATE_CHAT_STRING) ;
|
||||
|
||||
check() ;
|
||||
return;
|
||||
}
|
||||
if(url.host() == HOST_PUBLIC_MSG)
|
||||
{
|
||||
bool ok ;
|
||||
_type = TYPE_PUBLIC_MSG ;
|
||||
_hash = url.queryItemValue(PUBLIC_MSG_HASH) ;
|
||||
_time_stamp = url.queryItemValue(PUBLIC_MSG_TIME_STAMP).toUInt(&ok) ;
|
||||
_GPGid = url.queryItemValue(PUBLIC_MSG_SRC_PGP_ID) ;
|
||||
|
||||
check() ;
|
||||
return;
|
||||
}
|
||||
|
||||
if (url.host() == HOST_EXTRAFILE) {
|
||||
bool ok ;
|
||||
|
||||
|
@ -299,6 +330,29 @@ bool RetroShareLink::createFile(const QString& name, uint64_t size, const QStrin
|
|||
return valid();
|
||||
}
|
||||
|
||||
bool RetroShareLink::createPrivateChatInvite(time_t time_stamp,const QString& gpg_id,const QString& encrypted_chat_info)
|
||||
{
|
||||
clear() ;
|
||||
|
||||
_time_stamp = time_stamp ;
|
||||
_encrypted_chat_info = encrypted_chat_info ;
|
||||
|
||||
check() ;
|
||||
|
||||
return valid() ;
|
||||
}
|
||||
bool RetroShareLink::createPublicMsgInvite(time_t time_stamp,const QString& pgp_id,const QString& hash)
|
||||
{
|
||||
clear() ;
|
||||
|
||||
_time_stamp = time_stamp ;
|
||||
_hash = hash ;
|
||||
_GPGid = pgp_id ;
|
||||
|
||||
check() ;
|
||||
|
||||
return valid() ;
|
||||
}
|
||||
bool RetroShareLink::createPerson(const std::string& id)
|
||||
{
|
||||
clear();
|
||||
|
@ -491,78 +545,92 @@ void RetroShareLink::clear()
|
|||
_hash = "" ;
|
||||
_size = 0 ;
|
||||
_name = "" ;
|
||||
_GPGid = "" ;
|
||||
_time_stamp = 0 ;
|
||||
_encrypted_chat_info = "" ;
|
||||
}
|
||||
|
||||
void RetroShareLink::check()
|
||||
{
|
||||
_valid = true;
|
||||
|
||||
switch (_type) {
|
||||
case TYPE_UNKNOWN:
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_EXTRAFILE:
|
||||
if(!checkSSLId(_SSLid))
|
||||
_valid = false; // no break! We also test file stuff below.
|
||||
case TYPE_FILE:
|
||||
if(_size > (((uint64_t)1)<<40)) // 1TB. Who has such large files?
|
||||
switch (_type)
|
||||
{
|
||||
case TYPE_UNKNOWN:
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_EXTRAFILE:
|
||||
if(!checkSSLId(_SSLid))
|
||||
_valid = false; // no break! We also test file stuff below.
|
||||
case TYPE_FILE:
|
||||
if(_size > (((uint64_t)1)<<40)) // 1TB. Who has such large files?
|
||||
_valid = false;
|
||||
|
||||
if(!checkName(_name))
|
||||
_valid = false;
|
||||
if(!checkName(_name))
|
||||
_valid = false;
|
||||
|
||||
if(!checkHash(_hash))
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_PERSON:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
if(!checkHash(_hash))
|
||||
_valid = false;
|
||||
break;
|
||||
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
case TYPE_PRIVATE_CHAT:
|
||||
if(!checkRadix64(_encrypted_chat_info)) _valid = false ;
|
||||
break ;
|
||||
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_FORUM:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
case TYPE_PUBLIC_MSG:
|
||||
if(!checkHash(_hash)) _valid = false ;
|
||||
if(!checkPGPId(_GPGid)) _valid = false ;
|
||||
break ;
|
||||
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
case TYPE_PERSON:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_CHANNEL:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_FORUM:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_SEARCH:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_CHANNEL:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
|
||||
if(!_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_MESSAGE:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_CERTIFICATE:
|
||||
break;
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_SEARCH:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
|
||||
if(_name.isEmpty())
|
||||
_valid = false;
|
||||
|
||||
if(!_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_MESSAGE:
|
||||
if(_size != 0)
|
||||
_valid = false;
|
||||
|
||||
if(_hash.isEmpty())
|
||||
_valid = false;
|
||||
break;
|
||||
case TYPE_CERTIFICATE:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!_valid) {
|
||||
|
@ -579,6 +647,22 @@ QString RetroShareLink::title() const
|
|||
switch (_type) {
|
||||
case TYPE_UNKNOWN:
|
||||
break;
|
||||
case TYPE_PUBLIC_MSG:
|
||||
{
|
||||
RsPeerDetails detail;
|
||||
rsPeers->getPeerDetails(_GPGid.toStdString(), detail) ;
|
||||
return QString("Click to send a private message to %1 (%2).").arg(QString::fromStdString(detail.name)).arg(_GPGid) ;
|
||||
}
|
||||
case TYPE_PRIVATE_CHAT:
|
||||
{
|
||||
RsPeerDetails detail;
|
||||
rsPeers->getPeerDetails(_GPGid.toStdString(), detail) ;
|
||||
|
||||
if (_GPGid.toStdString() == rsPeers->getGPGOwnId())
|
||||
return QString("Click to open a private chat canal to %1 (%2).").arg(QString::fromStdString(detail.name)).arg(_GPGid) ;
|
||||
else
|
||||
return QString("This is a private chat invite for %1 (%2). You can't use it.").arg(QString::fromStdString(detail.name)).arg(_GPGid) ;
|
||||
}
|
||||
case TYPE_EXTRAFILE:
|
||||
return QString("%1 (%2, Extra - Source included)").arg(hash()).arg(misc::friendlyUnit(size()));
|
||||
case TYPE_FILE:
|
||||
|
@ -619,6 +703,28 @@ QString RetroShareLink::toString() const
|
|||
|
||||
return url.toString();
|
||||
}
|
||||
case TYPE_PRIVATE_CHAT:
|
||||
{
|
||||
QUrl url;
|
||||
url.setScheme(RSLINK_SCHEME) ;
|
||||
url.setHost(HOST_PRIVATE_CHAT) ;
|
||||
url.addQueryItem(PRIVATE_CHAT_TIME_STAMP,QString::number(_time_stamp)) ;
|
||||
url.addQueryItem(PRIVATE_CHAT_STRING,_encrypted_chat_info) ;
|
||||
|
||||
return url.toString() ;
|
||||
}
|
||||
case TYPE_PUBLIC_MSG:
|
||||
{
|
||||
QUrl url;
|
||||
url.setScheme(RSLINK_SCHEME) ;
|
||||
url.setHost(HOST_PUBLIC_MSG) ;
|
||||
url.addQueryItem(PUBLIC_MSG_TIME_STAMP,QString::number(_time_stamp)) ;
|
||||
url.addQueryItem(PUBLIC_MSG_HASH,_hash) ;
|
||||
url.addQueryItem(PUBLIC_MSG_SRC_PGP_ID,_GPGid) ;
|
||||
|
||||
return url.toString() ;
|
||||
}
|
||||
|
||||
case TYPE_EXTRAFILE:
|
||||
{
|
||||
QUrl url;
|
||||
|
@ -814,6 +920,37 @@ bool RetroShareLink::checkSSLId(const QString& ssl_id)
|
|||
|
||||
return true ;
|
||||
}
|
||||
bool RetroShareLink::checkPGPId(const QString& pgp_id)
|
||||
{
|
||||
if(pgp_id.length() != 16)
|
||||
return false ;
|
||||
|
||||
QByteArray qb(pgp_id.toAscii()) ;
|
||||
|
||||
for(int i=0;i<qb.length();++i)
|
||||
{
|
||||
unsigned char b(qb[i]) ;
|
||||
|
||||
if(!((b>47 && b<58) || (b>64 && b<71)))
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
bool RetroShareLink::checkRadix64(const QString& s)
|
||||
{
|
||||
QByteArray qb(s.toAscii()) ;
|
||||
|
||||
for(int i=0;i<qb.length();++i)
|
||||
{
|
||||
unsigned char b(qb[i]) ;
|
||||
|
||||
if(!( (b > 46 && b < 58) || (b > 64 && b < 91) || (b > 96 && b < 123) || b=='+'))
|
||||
return false;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool RetroShareLink::checkHash(const QString& hash)
|
||||
{
|
||||
if(hash.length() != 40)
|
||||
|
@ -1028,6 +1165,22 @@ static void processList(const QStringList &list, const QString &textSingular, co
|
|||
}
|
||||
break ;
|
||||
|
||||
case TYPE_PUBLIC_MSG:
|
||||
{
|
||||
std::cerr << "Opening a public msg window " << std::endl;
|
||||
std::cerr << " time_stamp = " << link._time_stamp << std::endl;
|
||||
std::cerr << " hash = " << link._hash.toStdString() << std::endl;
|
||||
std::cerr << " PGP Id = " << link._GPGid.toStdString() << std::endl;
|
||||
}
|
||||
break ;
|
||||
case TYPE_PRIVATE_CHAT:
|
||||
{
|
||||
std::cerr << "Opening a private chat window " << std::endl;
|
||||
std::cerr << " time_stamp = " << link._time_stamp << std::endl;
|
||||
std::cerr << " enc-string = " << link._encrypted_chat_info.toStdString() << std::endl;
|
||||
}
|
||||
break ;
|
||||
|
||||
case TYPE_FILE:
|
||||
case TYPE_EXTRAFILE:
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue