DWORD IRCMsgThread::Run() {
	onSysMsg(L"IRCMsgThread Start");
	iStatus=IRC_NORMAL;
	IRCMsgQueue.clear();
	unsigned int bufferlen;
	std::string recvstring,msg,umsg; //TwitchIRC use MultiByte
	while(!bKillThread ) { 	
		//Receive First
		bufferlen=0;		
		memset(buffer, 0, DEFAULT_BUFLEN);
		if(TheSocketPtr->recv_data((char*)buffer, bufferlen)) { //Disconnected
			iStatus=IRC_DISCONNECTED;
			break;
		}
		recvstring=std::string(buffer,bufferlen);
		//onDebugMsg(L"%ls",from_utf8(recvstring).c_str());
		if(recvstring.compare(":tmi.twitch.tv NOTICE * :Login unsuccessful\r\n")==0 || //Twitch
		   recvstring.compare(":tmi.twitch.tv NOTICE * :Error encountered while attempting login\r\n")==0 ){ //Justin
			Sleep(100); //Wait for logging
			onSysMsg(L"Login unsuccessful");
			iStatus=IRC_WRONGLOGIN;
			break;
		}//else if(recvstring.compare(":[email protected] PRIVMSG #append :break\r\n")==0){TheSocketPtr->CloseSocket();}
		//Basic parsing: make it into a string, check for PING, if not-send for further parsing.
		std::stringstream recvstr(recvstring);
		while( recvstr.tellg() < bufferlen ) {
			std::getline(recvstr,msg,'\n');
			//Old Style
			//:[email protected] PRIVMSG #ptken :what song is this ?
			//PING LAG1967655232
			//int colon_pos = (int)msg.find(":");
			//if (msg[0] != ':' && colon_pos > 0) msg=msg.substr(colon_pos); //if an irc message begins with " ", then trim the leading spaces   
			//
			//New Style
			// @color=#FF4500;display-name=Gm470520;emotes=;mod=0;room-id=47281189;subscriber=1;turbo=0;user-id=24255667;user-type= :[email protected] PRIVMSG #tetristhegrandmaster3 :這片到底在沖三小w
			int at_pos = (int)msg.find("@");
			if (msg[0] != '@' && at_pos > 0) msg=msg.substr(at_pos); //if an irc message begins with " ", then trim the leading spaces   
			if (msg[msg.length()-1]=='\r') msg=msg.substr(0,msg.length()-1); //trim the CR: getline only trim the LF		                   
			log(from_utf8(msg), LogType(RECEIVE)); //Although log file is in UTF8....using vswprintf
			//Ping Check
			umsg=msg.substr(0,5);
			ToUpperString(umsg);
            if (!umsg.compare("PING ")) sendRaw( L"PONG " + from_utf8(msg.substr(5)) ); // respond to PINGs //Reply Immediately 
			//Then parse the message
            else parseMessage(from_utf8(msg)); 
		}
		Sleep(100);
	}
	//Determine the reason to break the loop.
	if(!bKillThread) {
		if(iStatus==IRC_DISCONNECTED) onSysMsg(L"IRCMsgThread: Disconnect Unexpectedly");
		if(iStatus==IRC_WRONGLOGIN) onSysMsg(L"IRCMsgThread: Wrong Login Information");
	}
	else iStatus=IRC_CLOSED;
	//onDebugMsg(L"[Last Buffer]%ls",from_utf8(recvstring).c_str());
	onSysMsg(L"IRCMsgThread Close");
	thread=0;
	return 0;
}
示例#2
0
int main(int argc, char **argv)
{
	char	EncodingString[2048];
	int	Index = 0;
	int	ErrorCode = 0;
	DEVICE_INFO_T	DeviceInfo;
	Q_ENTRY	*req = qCgiRequestParse(NULL, (Q_CGI_T) 0);

	SvcLog = NULL;
	SvcLog = openLog("DEVICEINFO", LOG_FILE, LOG_MODE);

	memset(&DeviceInfo, 0x00, sizeof(DEVICE_INFO_T));
	memset(EncodingString, 0x00, 2048);

	if((ErrorCode = GetParams(req, EncodingString)) == SDRM_NO_ERROR)	{
		if(strncmp(EncodingString, "IA", 2) == 0)  {
			Index = 2;
		}
		else if(strncmp(EncodingString, "EA", 2) == 0)  {
			Index = 2;
		}

		ErrorCode = DecodingDeviceString4MGR(EncodingString+Index, &DeviceInfo);
		ToUpperString(DeviceInfo.UUID, strlen(DeviceInfo.UUID));
		ToUpperString(DeviceInfo.SecondaryUUID, strlen(DeviceInfo.SecondaryUUID));

		printLog(HEAD, "ClientIP(%s)Input(%s)\t\n<=>UUID(%s)SecondaryUUID(%s)UUIDTypes(%s)DeviceName(%s)OSVersion(%s)AppVersion(%s)RegVersion(%s)BuildNum(%s)ErrorCode(%d)\n",
			getenv("REMOTE_ADDR"), EncodingString, DeviceInfo.UUID, DeviceInfo.SecondaryUUID, DeviceInfo.UUIDTypes, 
			DeviceInfo.DeviceName, DeviceInfo.OSVersion, DeviceInfo.AppVersion, DeviceInfo.RegisterVersion, DeviceInfo.BuildNumber, ErrorCode);

	}
	else	{
		printLog(HEAD, "CientIP(%s)InvalidParams...\n", getenv("REMOTE_ADDR"));
	}
	qCgiResponseSetContentType(req, "text/html");
	printResultDeviceInfo(ErrorCode, DeviceInfo);

	closeLog(SvcLog);

	return 0;
}
示例#3
0
文件: auth.c 项目: k2b3d/client_new
jstring Java_com_thinkware_i3dlite_AuthConfirm_GetAuthParam(JNIEnv *env, jobject thiz, jobject activity)
{

	char AllPropString[512];
	char PropName[32];
	char PropValue[32];
	char DeviceID[32];
	char Mdn[32];

	int index = 0;
	int i = 0;
	int retry = 0;

	memset(AllPropString, 0, sizeof(AllPropString));
	memset(PropName, 0, sizeof(PropName));
	memset(PropValue, 0, sizeof(PropValue));
	memset(DeviceID, 0, sizeof(DeviceID));	//IMEI
	memset(Mdn, 0, sizeof(Mdn));

	for(i=0; i<DEVICE_PROPERTY_COUNT; i++) {

		memset(PropName, 0, sizeof(PropName));
		memset(PropValue, 0, sizeof(PropValue));

		sprintf(PropName, "val%d", i+1);
		strcpy(AllPropString+index, PropName);
		index += strlen(PropName);
		AllPropString[index] = '=';
		index++;
		__system_property_get(PropNameList[i], PropValue);
		if( strcmp(PropNameList[i], "ril.wifi_macaddr") == 0 ) {
			if( strlen(PropValue) == 0 ) {	// ril.wifi_macaddr로 못가져왔을때
				while(retry < GET_WIFI_MAC_RETRY_CNT) {
					GetWifiMac(env, activity, PropValue);
					if(strlen(PropValue) >= 12) break;
					else Delay(1000);

					retry++;
				}
			}
			ToUpperString(PropValue, strlen(PropValue));
			RemoveColonDashSpace(PropValue, strlen(PropValue));
			//if(strlen(PropValue)<12) {		// 최종적으로 WIFI MAC을 못가져왔을때 "NONE"으로 채워서 내보낸다.
			//	strcpy(PropValue, NONE_VALUE_STRING);
			//}

		} else if( strcmp(PropNameList[i], "ro.serialno") == 0 ) {	// ro.serialno로 못가져왔을때
			if( strlen(PropValue) == 0 ) {
				GetBuildSerial(env, activity, PropValue);
			}
			ToUpperString(PropValue, strlen(PropValue));
		} else if( strcmp(PropNameList[i], "ro.product.model") == 0 ) {
			ToUpperString(PropValue, strlen(PropValue));
		}

		// 값이 없는것들은 "NONE"으로 내보내기
		if(strlen(PropValue) == 0) {
			strcpy(PropValue, NONE_VALUE_STRING);
		}

		strcpy(AllPropString+index, PropValue);
		index += strlen(PropValue);

		AllPropString[index] = '|';
		index++;
	}

	// DeviceID(IMEI)
	GetDeviceID(env, activity, DeviceID);
	strcpy(AllPropString+index, "val5");
	index += strlen("val5");
	AllPropString[index] = '=';
	index++;
	if(strlen(DeviceID) == 0) {	// 값 없으면 "NONE"으로 내보내기
		strcpy(DeviceID, NONE_VALUE_STRING);
	}
	strcpy(AllPropString+index, DeviceID);
	index += strlen(DeviceID);
	AllPropString[index] = '|';
	index++;

	// MDN
	GetMdn(env, activity, Mdn);
	verifyMdn(Mdn);		// 전화번보 +82로 시작하는거 0으로 바꾸기
	strcpy(AllPropString+index, "val6");
	index += strlen("val6");
	AllPropString[index] = '=';
	index++;
	if(strlen(Mdn) == 0) {	// 값 없으면 "NONE"으로 내보내기
		strcpy(Mdn, NONE_VALUE_STRING);
	}
	strcpy(AllPropString+index, Mdn);
	index += strlen(Mdn);
	AllPropString[index] = '|';
	index++;

	return (*env)->NewStringUTF(env, AllPropString);
}
示例#4
0
文件: en_dr.c 项目: k2b3d/client_new
//	Interface chaged by [email protected]
//	from
//	int decode_crypt_data_from_file(const char * file_name, 
//			const long start_offset, const long exist_offset, DRMInfo * info, char* map_version)
//	to
int decode_crypt_data_from_file(const char * file_name, 
		const long start_offset, const long exist_offset, DRMInfo * info, DRMInfo DeviceDRMInfo)
{
	FILE *fptr = NULL ;
	char data[320] = "" ;
	long read_byte = 0 ;
	int	i;
	struct stat stbuf ;
	char exist_flag = 0 ;
	char	MAP_CATEGORY, MAP_CATEGORY_2;

	D("DEBUG: decode_crypt_data_from_file:%s:%d:%d:%s\n", 
		file_name, start_offset, exist_offset, DeviceDRMInfo.map_ver) ;
	if(stat(file_name, &stbuf) != 0) {
		D("ERR: %s file read fail (file not found)!\n", file_name) ;
		return DRM_ERR_NOFILE ;
	}
	
	fptr = fopen(file_name, "rb") ;
	if(fptr == NULL) {
		D("ERR: %s file read fail (file not found)!\n", file_name) ;
		return DRM_ERR_NOFILE ;
	}

	if(exist_offset> 0) {
		fseek(fptr, exist_offset, SEEK_SET) ;
		read_byte = fread(&exist_flag, 1, 1, fptr) ;
		D("DEBUG: exist_flag[%d]\n", exist_flag) ;
		if(exist_flag == 0) {
			fclose(fptr) ;	
			return DRM_ERR_NONE ;
		}
		else if(exist_flag != 1) {
			D("ERR: exist_flag[%d]\n", exist_flag) ;
			fclose(fptr) ;	
			return DRM_ERR_DECODE ;
		}
	}

	fseek(fptr, start_offset, SEEK_SET) ;
	read_byte = fread(data, 1, 320, fptr) ;

	if (read_byte != 320) {
		D("ERR: %s file auth fail (read_byte:%d)!\n", file_name, read_byte) ;
	
		fclose(fptr) ;	
		return DRM_ERR_READ;
	}

	int ret = getAuthData_Beecryption_(data, info);
	D("DEBUG - uuid(%s)device(%s)\n", info->uuid, info->device) ;

	if (ret != 1) {
		D("ERR: %s file auth fail (decode)!\n", file_name);
	
		fclose(fptr) ;
		return DRM_ERR_DECODE;
	}
	D("DEBUG: info->file_size[%s] stbuf.st_size(%d)\n", info->file_size, stbuf.st_size) ;

	fclose(fptr) ;

	if(stbuf.st_size != atoi(info->file_size)) {
		D("ERR: %s file Not Match File Size(r:%d vs i:%s)\n", file_name, stbuf.st_size, info->file_size) ;
		return DRM_ERR_NOMATCHFILESIZE;
	}

	D("DEBUG::UUID(%s) VS Primary(%s)Secondary(%s)\n", info->uuid, DeviceDRMInfo.uuid, DeviceDRMInfo.secondary_uuid);
	if (strncmp(info->uuid, DeviceDRMInfo.uuid, sizeof(info->uuid)) != 0) {
		if (strncmp(info->uuid, DeviceDRMInfo.secondary_uuid, sizeof(info->uuid)) != 0) {
			//	Convert UUID from MapData to uppercase and re-compare
			ToUpperString(info->uuid, strlen(info->uuid));
			if (strncmp(info->uuid, DeviceDRMInfo.uuid, sizeof(info->uuid)) != 0) {
				if (strncmp(info->uuid, DeviceDRMInfo.secondary_uuid, sizeof(info->uuid)) != 0) {

					D("ERR: %s file auth fail (not match uuid) AuthUUID(%s) V.S. PrimayUUID(%s)SecondayUUID(%s)!! \n", file_name, info->uuid, DeviceDRMInfo.uuid, DeviceDRMInfo.secondary_uuid) ;
					return DRM_ERR_NOMATCHUUID;
				}
			}
		}
	}

#ifndef	__NO_DRM	//	ON DRM
	if (strncmp(info->device, DeviceDRMInfo.device, REALDEVICENAME_LEN) != 0) {
		D("ERR: %s file auth fail\n", file_name);
		D("(not match device(%.12s)(%.12s))!\n", info->device, DeviceDRMInfo.device) ;
		return DRM_ERR_NOMATCH_DEVICE;
	}
#endif

	if( strncmp(info->map_ver, DeviceDRMInfo.map_ver, strlen(DeviceDRMInfo.map_ver)) != 0 ) {	
		D("ERR: %s not match map_version\n", info->map_ver) ;
		D("(not match Mapver(%.12s)(%.12s))!\n", info->map_ver, DeviceDRMInfo.map_ver) ;
		return DRM_ERR_NOMATCH_MAPVER;
	}

	if( strcmp(DeviceDRMInfo.register_ver, DEVICE_PND3D) == 0 || strcmp(DeviceDRMInfo.register_ver, DEVICE_PND3F) == 0)	{
		MAP_CATEGORY = MAP_DEVICE_TW_PND;
		MAP_CATEGORY_2 = MAP_DEVICE_TW_PND2;
	}
	else	{
		MAP_CATEGORY = MAP_DEVICE_NON_TWL;
		MAP_CATEGORY_2 = MAP_DEVICE_NON_TWR;
	}
	//	Map Device Type Check
	if(DeviceDRMInfo.map_ver[DEVICE_CHECK_POSITION] != MAP_CATEGORY &&
		DeviceDRMInfo.map_ver[DEVICE_CHECK_POSITION] != MAP_CATEGORY_2)	{
		D("ERR: %s not match map_version (%c) category (%c) or (%c)\n", info->map_ver, DeviceDRMInfo.map_ver[DEVICE_CHECK_POSITION], MAP_CATEGORY, MAP_CATEGORY_2) ;
		D("(not match Mapver(%.12s)(%.12s))!\n", info->map_ver, DeviceDRMInfo.map_ver) ;
		return DRM_ERR_NOMATCH_MAPVER;
	}
/*
	if (strncmp(info->app_build_num, DeviceDRMInfo.app_build_num, sizeof(info->app_build_num)) != 0) {
		D("ERR: %s file auth fail\n", file_name);
		D("(not match buildNum(%.8s)(%.8s))!\n", info->app_build_num, DeviceDRMInfo.app_build_num) ;
		return DRM_ERR_NOMATCH_BUILDNUM;
	}
*/
	D("EXP(%s)ispaid(%c)info->exceed_days(%s)reserv(%s)\n", info->expire_date, info->ispaid, info->exceed_days, info->reserved);
//	memcpy(DeviceDRMInfo.expire_date, info->expire_date, 8);
//	memcpy(DeviceDRMInfo.reserved, info->reserved, 12);

	D("[OK] %s file auth success!\n", file_name);
	return DRM_ERR_NONE ;
}