예제 #1
1
cell AMX_NATIVE_CALL pawn_regex_set(AMX* amx, cell* params)
{
	const char *rexp = NULL;
	amx_StrParam(amx, params[1], rexp);
	if(rexp)
	{
		int aidi=(int)params[2];
		//logprintf("aidi %d", aidi);
		if(aidi>=0 && aidi<TotalExpressions)
		{
			onig_free(rexpression[aidi].RegExpr);
			onig_region_free(rexpression[aidi].zreg, 1);
			UChar* pattern = (UChar* )rexp;
			OnigErrorInfo einfo;
			rexpression[aidi].id = onig_new(&rexpression[aidi].RegExpr, pattern, pattern + strlen(rexp), ONIG_OPTION_NONE, ONIG_ENCODING_UTF8, ONIG_SYNTAX_DEFAULT, &einfo);
			if(rexpression[aidi].id != ONIG_NORMAL)
			{
				UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
				onig_error_code_to_str(s, rexpression[aidi].id, &einfo);
				logprintf("[REGEX ERROR]: %s | at index %d. regex_set aborted.", s, aidi);
				onig_free(rexpression[aidi].RegExpr);
				return -1;
			}
			rexpression[aidi].zreg = onig_region_new();
			//logprintf("aidi %d", aidi);
			return 1;
		}
		logprintf("[REGEX ERROR]: Call regex_set with undefined parameter at index %d", aidi);
		return -1;
	}
    return -1337;
}
예제 #2
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_SetChannelDescription(channelname[], desc[]);
cell AMX_NATIVE_CALL native_TSC_SetChannelDescription(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string ChannelName(TmpParam);
	TSServer.EscapeString(ChannelName);

	amx_StrParam(amx, params[2], TmpParam);
	string Desc(TmpParam);
	TSServer.EscapeString(Desc);


	CommandList *cmds = new CommandList;

	string CmdStr("channelfind pattern=");
	CmdStr.append(ChannelName);
	cmds->push(new CCommand(CmdStr, "cid"));

	CmdStr.assign("channeledit cid=<1> channel_description=");
	CmdStr.append(Desc);
	cmds->push(new CCommand(CmdStr));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #3
0
cell AMX_NATIVE_CALL pawn_regex_match(AMX* amx, cell* params)
{
	regex_t* RegExpr;
	const char *rexp = NULL, *string = NULL;
	amx_StrParam(amx, params[1], string);
	amx_StrParam(amx, params[2], rexp);
	if(string && rexp)
	{
		int r=NULL;
		UChar* pattern = (UChar* )rexp;
		OnigErrorInfo einfo;
		r = onig_new(&RegExpr, pattern, pattern + strlen((char* )pattern), ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_PERL, &einfo);
		//logprintf("[REGEX DEBUG]: rexp %s",pattern);
		if(r != ONIG_NORMAL)
		{
			UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
			onig_error_code_to_str(s, r, &einfo);
			logprintf("[REGEX ERROR]: %s", s);
			onig_free(RegExpr);
			return -1;
		}
		UChar* str = (UChar* )string;
		OnigRegion *region;
		region = onig_region_new();
		r = onig_match(RegExpr, str, str+strlen((char*) str), str, region, ONIG_OPTION_NONE);
		//logprintf("[REGEX DEBUG]: string %s",str);
		onig_region_free(region, 1);
		onig_free(RegExpr);
		//logprintf("[REGEX DEBUG]: return %d",r);
		return r;
	}
    return -1337;
}
예제 #4
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_SetClientChannelGroup(uid[], groupid, channelname[]);
cell AMX_NATIVE_CALL native_TSC_SetClientChannelGroup(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string UID(TmpParam);
	TSServer.EscapeString(UID);

	amx_StrParam(amx, params[3], TmpParam);
	string ChannelName(TmpParam);
	TSServer.EscapeString(ChannelName);
	
	
	CommandList *cmds = new CommandList;

	string CmdStr("channelfind pattern=");
	CmdStr.append(ChannelName);
	cmds->push(new CCommand(CmdStr, "cid"));

	char FormatTmp[256];
	sprintf(FormatTmp, "clientdbfind pattern=%s -uid", UID.c_str());
	cmds->push(new CCommand(FormatTmp, "cldbid"));

	sprintf(FormatTmp, "setclientchannelgroup cgid=%d cid=<1> cldbid=<2>", (int)params[2]);
	cmds->push(new CCommand(FormatTmp));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #5
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_MoveClient(uid[], channelname[]);
cell AMX_NATIVE_CALL native_TSC_MoveClient(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string UID(TmpParam);
	TSServer.EscapeString(UID);

	amx_StrParam(amx, params[2], TmpParam);
	string ChannelName(TmpParam);
	TSServer.EscapeString(ChannelName);
	

	CommandList *cmds = new CommandList;
	
	CCommand *cmd1 = new CCommand("clientlist -uid", "clid");
	cmd1->MFind = "client_unique_identifier=";
	cmd1->MFind.append(UID);
	cmds->push(cmd1);

	char FormatTmp[128];
	sprintf(FormatTmp, "channelfind pattern=%s", ChannelName.c_str());
	cmds->push(new CCommand(FormatTmp, "cid"));

	cmds->push(new CCommand("clientmove clid=<1> cid=<2>"));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #6
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_MoveChannelBelowChannel(channelname[], parentchannelname[]);
cell AMX_NATIVE_CALL native_TSC_MoveChannelBelowChannel(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string ChannelName(TmpParam);
	TSServer.EscapeString(ChannelName);

	amx_StrParam(amx, params[2], TmpParam);
	string ParentChannelName(TmpParam);
	TSServer.EscapeString(ParentChannelName);

	
	CommandList *cmds = new CommandList;

	string CmdStr("channelfind pattern=");
	CmdStr.append(ChannelName);
	cmds->push(new CCommand(CmdStr, "cid"));

	CmdStr.assign("channelfind pattern=");
	CmdStr.append(ParentChannelName);
	cmds->push(new CCommand(CmdStr, "cid"));

	cmds->push(new CCommand("channeledit cid=<1> channel_order=<2>"));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #7
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_SendClientMessage(uid[], msg[]);
cell AMX_NATIVE_CALL native_TSC_SendClientMessage(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string UID(TmpParam);
	TSServer.EscapeString(UID);

	amx_StrParam(amx, params[2], TmpParam);
	string Msg(TmpParam);
	TSServer.EscapeString(Msg);


	CommandList *cmds = new CommandList;

	CCommand *cmd1 = new CCommand("clientlist -uid", "clid");
	cmd1->MFind = "client_unique_identifier=";
	cmd1->MFind.append(UID);
	cmds->push(cmd1);

	char FormatTmp[256];
	sprintf(FormatTmp, "sendtextmessage targetmode=1 target=<1> msg=%s", Msg.c_str());
	cmds->push(new CCommand(FormatTmp, "cid"));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #8
0
파일: natives.cpp 프로젝트: hqy/tsconnector
//native TSC_SendChannelMessage(channelname[], msg[]);
cell AMX_NATIVE_CALL native_TSC_SendChannelMessage(AMX* amx, cell* params) {
	char *TmpParam = NULL;

	amx_StrParam(amx, params[1], TmpParam);
	string ChannelName(TmpParam);
	TSServer.EscapeString(ChannelName);

	amx_StrParam(amx, params[2], TmpParam);
	string Msg(TmpParam);
	TSServer.EscapeString(Msg);


	CommandList *cmds = new CommandList;

	string CmdStr("channelfind pattern=");
	CmdStr.append(ChannelName);
	cmds->push(new CCommand(CmdStr, "cid"));

	char FormatTmp[256];
	sprintf(FormatTmp, "sendtextmessage targetmode=2 target=<1> msg=%s", Msg.c_str());
	cmds->push(new CCommand(FormatTmp));

	TSServer.AddCommandListToQueue(cmds);
	return 1;
}
예제 #9
0
파일: natives.cpp 프로젝트: hqy/tsconnector
cell AMX_NATIVE_CALL native_TSC_Connect(AMX* amx, cell* params) {
	char 
		*IP = NULL,
		*VPort = NULL;
	amx_StrParam(amx, params[1], IP);
	amx_StrParam(amx, params[2], VPort);
	return TSServer.Connect(IP, VPort);
}
예제 #10
0
파일: natives.cpp 프로젝트: hqy/tsconnector
cell AMX_NATIVE_CALL native_TSC_Login(AMX* amx, cell* params) {
	char
		*Login = NULL,
		*Pass = NULL,
		*Nick = NULL;
	amx_StrParam(amx, params[1], Login);
	amx_StrParam(amx, params[2], Pass);
	amx_StrParam(amx, params[3], Nick);
	return TSServer.Login(Login, Pass, Nick);
}
예제 #11
0
static cell AMX_NATIVE_CALL n_SetQueryVar(AMX *amx, const cell *params) {
	engineModule *engine = new engineModule;
	char *var = NULL;
	char *vardesc = NULL;
    amx_StrParam(amx, params[1], var);
	amx_StrParam(amx, params[2], vardesc);
    engine->SetQueryVar(var, vardesc);
	delete engine;
	return 1;
}
예제 #12
0
cell AMX_NATIVE_CALL pawn_regex_search(AMX* amx, cell* params)
{
	regex_t* RegExpr;
	const char *rexp = NULL, *string = NULL;
	cell* addr[2] = {NULL, NULL};
	amx_GetAddr(amx, params[3], &addr[0]);
    amx_GetAddr(amx, params[4], &addr[1]);
	amx_StrParam(amx, params[1], string);
	amx_StrParam(amx, params[2], rexp);
	if(string && rexp)
	{
		int r=NULL;
		UChar* pattern = (UChar* )rexp;
		OnigErrorInfo einfo;
		r = onig_new(&RegExpr, pattern, pattern + strlen((char* )pattern), ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_PERL, &einfo);
		//logprintf("[REGEX DEBUG]: rexp %s",pattern);
		if(r != ONIG_NORMAL)
		{
			UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
			onig_error_code_to_str(s, r, &einfo);
			logprintf("[REGEX ERROR]: %s", s);
			onig_free(RegExpr);
			return -1;
		}
		UChar* str = (UChar* )string;
		OnigRegion *region;
		region = onig_region_new();
		r = onig_search(RegExpr, str, str+strlen((char*) str), str, str+strlen((char*) str), region, ONIG_OPTION_NONE);
		if(r>=0)
		{
			*addr[0]=r;
			*addr[1]=region->end[region->num_regs-1]-1;
		}
		else if(r==ONIG_MISMATCH)
		{
			*addr[0]=-1;
			*addr[1]=-1;
		}
		else
		{
			UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
			onig_error_code_to_str(s, r);
			logprintf("[REGEX ERROR]: %s\n", s);
			onig_region_free(region, 1);
			onig_free(RegExpr);
			return -1;
		}
		//logprintf("[REGEX DEBUG]: string %s",str);
		onig_region_free(region, 1);
		onig_free(RegExpr);
		//logprintf("[REGEX DEBUG]: return %d",r);
		return 1;
	}
    return -1337;
}
예제 #13
0
static cell AMX_NATIVE_CALL amx_draw_menubar(AMX *amx, const cell *params)
{
    char *b1, *b2, *b3, *b4;
    amx_StrParam(amx, params[1], b1);
    amx_StrParam(amx, params[2], b2);
    amx_StrParam(amx, params[3], b3);
    amx_StrParam(amx, params[4], b4);
    
    draw_menubar(b1, b2, b3, b4);
    return 0;
}
예제 #14
0
// native mysql_statement_prepare(query[], parameters[]);
static cell AMX_NATIVE_CALL n_mysql_statement_prepare(AMX* amx, cell* params) {
  CHECK_PARAMS(2);

  char* query, *parameters;
  amx_StrParam(amx, params[1], query);
  amx_StrParam(amx, params[2], parameters);

  if (strlen(query) == 0)
    return -1;

  return statementRegistry->Create(query, parameters);
}
예제 #15
0
// native LoadAllMTAMap(flags);
cell AMX_NATIVE_CALL n_LoadAllMTAMap(AMX* amx, cell* params)
{
	char *szName;
	amx_StrParam(amx, params[1], szName);

	return pConverter->LoadAllMTAMap(static_cast<int>(params[2]) != 0);
}
예제 #16
0
// native aat_NetStats(stats[]);
cell AMX_NATIVE_CALL amxNatives::NetStats(AMX *amx, cell *params)
{
	if(!arguments(1))
	{
		aat_Debug("Number of arguments in native 'aat_NetStats' does not conform to definition");
		logprintf("Anti-Attack Warning: Number of arguments in native 'aat_NetStats' does not conform to definition");

		return NULL;
	}

    char *stats = NULL;

    amx_StrParam(amx, params[1], stats);

	if(stats == NULL)
	{
		aat_Debug("NULL network stats passed to native 'aat_NetStats'");
		logprintf("Anti-Attack warning: NULL network stats passed to native 'aat_NetStats'");

		return NULL;
	}

	std::string netStats;

	netStats.assign(stats);
	netStats.erase(NULL, (netStats.find("Inst. KBits per second: ") + 25));
	netStats.erase(netStats.find('\n'));
		
	float ret = atof(netStats.c_str());

	return amx_ftoc(ret);
}
예제 #17
0
// GetMapIDFromName(const mapname[]);
cell AMX_NATIVE_CALL n_GetMapIDFromName(AMX* amx, cell* params)
{	
	char *szName;
	amx_StrParam(amx, params[1], szName);

	return pConverter->GetMapIDFromName(std::string(szName));
}
예제 #18
0
파일: amxdgram.c 프로젝트: OKStyle/rupawno
/* sendstring(const message[], const destination[]="")
 * destination has the format "127.0.0.1:9930"; when set to an empty string,
 * a broadcast is sent.
 * To mark the text as a "string", the function inserts a "byte order mark" in
 * front of it. It does this for Extended ASCII strings too, although this is
 * not entirely correct.
 * Returns true on success, false on failure.
 */
static cell AMX_NATIVE_CALL n_sendstring(AMX *amx, const cell *params)
{
  int r = 0, length;
  cell *cstr;
  char *host, *message, *ptr;
  short port=AMX_DGRAMPORT;

  cstr = amx_Address(amx, params[1]);
  amx_UTF8Len(cstr, &length);

  if ((message = alloca(length + 3 + 1)) != NULL) {
    /* insert the byte order mark (BOM) */
    message[0]='\xef';
    message[1]='\xbb';
    message[2]='\xbf';
    /* if this is a wide string, convert it to UTF-8 */
    if ((ucell)*cstr<=UNPACKEDMAX) {
      ptr=message+3;
      while (*cstr!=0)
        amx_UTF8Put(ptr, &ptr, length - (ptr-message), *cstr++);
      *ptr='\0';
    } else {
      amx_GetString(message+3, cstr, 0, UNLIMITED);
    } /* if */

    amx_StrParam(amx, params[2], host);
    if (host != NULL && (ptr=strchr(host,':'))!=NULL && isdigit(ptr[1])) {
      *ptr++='\0';
      port=(short)atoi(ptr);
    } /* if */
    r= (udp_Send(host,port,message,strlen(message)+1) > 0);
  } /* if */

  return r;
}
예제 #19
0
파일: amx_fpga.c 프로젝트: cfb95/QuadPawn
static cell AMX_NATIVE_CALL amx_fpga_load(AMX *amx, const cell *params)
{
    set_port_directions(0); // All as inputs
    
    char *fname;
    amx_StrParam(amx, params[1], fname);
    
    uint8_t *buffer;
    if (amx_Allot(amx, 1024/sizeof(cell), (cell**)&buffer) != 0)
        return false;
    
    bool status = false;
    if (!fname[0])
    {
        have_custom_image = false;
        status = fpga_configure(NULL, buffer);
        set_port_directions(default_pins);
    }
    else
    {
        have_custom_image = true;
        
        FIL file;
        if (f_open(&file, fname, FA_READ) != FR_OK)
            return false;

        status = fpga_configure(&file, buffer);
        
        f_close(&file);
    }
    
    amx_Release(amx, (cell*)buffer);
    return status;
}
예제 #20
0
// native mysql_connect(const hostname[], const username[], const password[], const database[], port = 3306);
// returns: connectionHandle.
static cell AMX_NATIVE_CALL n_mysql_connect(AMX* amx, cell* params) {
	CHECK_PARAMS(5);

	char* hostname, * username, * password, * database;
	amx_StrParam(amx, params[1], hostname);
	amx_StrParam(amx, params[2], username);
	amx_StrParam(amx, params[3], password);
	amx_StrParam(amx, params[4], database);
	unsigned int port = params[5];

  if (!hostname || !username || !password || !database)
    return 0;

	Script script(amx);
	return connectionController->connect(script, hostname, username, password, database, port);
}
예제 #21
0
void CCallback::FillCallbackParams(AMX* amx, cell* params, const int ConstParamCount) {
	unsigned int ParamIdx = 1;
	cell *AddressPtr;

	for(string::iterator c = ParamFormat.begin(), end = ParamFormat.end(); c != end; ++c) 
	{
		if ( (*c) == 'd' || (*c) == 'i') {
			amx_GetAddr(amx, params[ConstParamCount + ParamIdx], &AddressPtr);
			char IntBuf[12]; //12 -> strlen of (-2^31) + '\0'
			ConvertIntToStr<10>((*AddressPtr), IntBuf);
			Parameters.push(IntBuf);
		} 
		else if ( (*c) == 's' || (*c) == 'z') {
			char *StrBuf = NULL;
			amx_StrParam(amx, params[ConstParamCount + ParamIdx], StrBuf);
			Parameters.push(StrBuf == NULL ? string() : StrBuf);
		} 
		else if ( (*c) == 'f') {
			amx_GetAddr(amx, params[ConstParamCount + ParamIdx], &AddressPtr);
			char FloatBuf[84]; //84 -> strlen of (2^(2^7)) + '\0'
			ConvertFloatToStr(amx_ctof(*AddressPtr), FloatBuf);
			Parameters.push(FloatBuf);
		} 
		else 
			Parameters.push("NULL");

		ParamIdx++;
	}
}
예제 #22
0
jobject makeObjectFromReturnType(JNIEnv *env, jint returnType, AMX *amx, cell retval)
{
    if (returnType == 0) //If returnType == Integer
    {
        auto cls = env->FindClass("java/lang/Integer");
        auto methodID = env->GetMethodID(cls, "<init>", "(I)V");
        return env->NewObject(cls, methodID, retval);
    }
    else if (returnType == 1) //If returnType == Float
    {
        auto cls = env->FindClass("java/lang/Float");
        auto methodID = env->GetMethodID(cls, "<init>", "(F)V");
        return env->NewObject(cls, methodID, amx_ctof(retval));
    }
    else if (returnType == 2) //If returnType == String
    {
        char* result = NULL;
        amx_StrParam(amx, retval, result);
        auto cls = env->FindClass("java/lang/String");
        auto methodID = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;)V");
        //TODO: fix
        return env->NewObject(cls, methodID, result);
    }
    return nullptr;
}
예제 #23
0
// native mysql_fetch_field_string(resultId, field[], buffer[], bufferSize = sizeof(buffer));
static cell AMX_NATIVE_CALL n_mysql_fetch_field_string(AMX* amx, cell* params) {
	CHECK_PARAMS(4);

	ResultEntry* entry = resultController->at(static_cast<unsigned int>(params[1]));
	if (entry == nullptr)
		return 0;

	char* fieldName;
	amx_StrParam(amx, params[2], fieldName);

	if (!fieldName || !strlen(fieldName))
		return 0;

	cell* bufferCell;
	amx_GetAddr(amx, params[3], &bufferCell);

	ColumnInfo::ColumnType fieldType = ColumnInfo::UnknownColumnType;
	const RowInfo::FieldValue* fieldValue = entry->fetch_field(fieldName, fieldType);

	if (fieldType != ColumnInfo::StringColumnType) {
		DebugPrinter::Print("[MySQL] Tried to get column \"%s\" with the wrong data-type, ignored.", fieldName);
		return 0;
	}

	amx_SetString(bufferCell, fieldValue->string_val, 0, 0, static_cast<size_t>(params[4]));
	return strlen(fieldValue->string_val);
}
예제 #24
0
//Wrapper functions (These are defined so we can use them on the script later)
static cell AMX_NATIVE_CALL n_print(AMX* amx, const cell *params)
{
        char *ret = NULL;
        amx_StrParam(amx, params[1], ret);
        printf("%s\n", ret);
        return 0;
}
예제 #25
0
static cell AMX_NATIVE_CALL n_FindEntityByClassname(AMX *amx, const cell *params) {
	CBaseEntity *entity = new CBaseEntity;
	char *ret = NULL;
    amx_StrParam(amx, params[2], ret);
    int id = entity->FindEntityByClassname(params[1], ret);
	delete entity;
	return id;
}
예제 #26
0
static cell AMX_NATIVE_CALL n_ConsoleCommand(AMX* amx, const cell *params)
{
        char *ret = NULL;
        amx_StrParam(amx, params[1], ret);
		engineModule *engine = new engineModule;
		engine->ConsoleCommand(ret);
		delete engine;
        return 0;
}
예제 #27
0
static cell AMX_NATIVE_CALL amx_draw_flowtext(AMX *amx, const cell *params)
{
    char *text;
    amx_StrParam(amx, params[1], text);
    
    draw_flowtext(text, params[2], params[3], params[4], params[5], params[6], params[7], params[8]);
    
    return 0;
}
예제 #28
0
static cell AMX_NATIVE_CALL n_PrecacheUnmodified(AMX* amx, const cell *params)
{
        char *ret = NULL;
        amx_StrParam(amx, params[1], ret);
		engineModule *engine = new engineModule;
		engine->Precache(TYPE_UNMODIFIED, ret);
		delete engine;
        return 0;
}
예제 #29
0
static cell AMX_NATIVE_CALL n_PrecacheEvent(AMX* amx, const cell *params)
{
        char *ret = NULL;
        amx_StrParam(amx, params[1], ret);
		engineModule *engine = new engineModule;
		engine->Precache(TYPE_EVENT, ret);
		delete engine;
        return 0;
}
예제 #30
0
static cell AMX_NATIVE_CALL n_PrecacheModel(AMX* amx, const cell *params)
{
        char *ret = NULL;
        amx_StrParam(amx, params[1], ret);
		engineModule *engine = new engineModule;
		int m_Index = engine->Precache(TYPE_MDL, ret);
		delete engine;
        return m_Index;
}