50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
This file is part of Telegram Desktop,
 | 
						|
the official desktop application for the Telegram messaging service.
 | 
						|
 | 
						|
For license and copyright information please follow this link:
 | 
						|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
						|
*/
 | 
						|
#include "mtproto/rpc_sender.h"
 | 
						|
 | 
						|
RPCError::RPCError(const MTPrpcError &error)
 | 
						|
: _code(error.c_rpc_error().verror_code().v) {
 | 
						|
	QString text = qs(error.c_rpc_error().verror_message());
 | 
						|
	if (_code < 0 || _code >= 500) {
 | 
						|
		_type = qsl("INTERNAL_SERVER_ERROR");
 | 
						|
		_description = text;
 | 
						|
	} else {
 | 
						|
		const auto expression = QRegularExpression(
 | 
						|
			"^([A-Z0-9_]+)(: .*)?$",
 | 
						|
			reMultiline);
 | 
						|
		const auto match = expression.match(text);
 | 
						|
		if (match.hasMatch()) {
 | 
						|
			_type = match.captured(1);
 | 
						|
			_description = match.captured(2).mid(2);
 | 
						|
		} else {
 | 
						|
			_type = qsl("CLIENT_BAD_RPC_ERROR");
 | 
						|
			_description = qsl("Bad rpc error received, text = '") + text + '\'';
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RPCOwnedDoneHandler::RPCOwnedDoneHandler(RPCSender *owner) : _owner(owner) {
 | 
						|
	_owner->rpcRegHandler(this);
 | 
						|
}
 | 
						|
 | 
						|
RPCOwnedDoneHandler::~RPCOwnedDoneHandler() {
 | 
						|
	if (_owner) {
 | 
						|
		_owner->rpcUnregHandler(this);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
RPCOwnedFailHandler::RPCOwnedFailHandler(RPCSender *owner) : _owner(owner) {
 | 
						|
	_owner->rpcRegHandler(this);
 | 
						|
}
 | 
						|
 | 
						|
RPCOwnedFailHandler::~RPCOwnedFailHandler() {
 | 
						|
	if (_owner) {
 | 
						|
		_owner->rpcUnregHandler(this);
 | 
						|
	}
 | 
						|
}
 |