static void mapif_parse_Mail_send(int fd) { struct mail_message msg; char esc_name[NAME_LENGTH*2+1]; int account_id = 0; if(RFIFOW(fd,2) != 8 + sizeof(struct mail_message)) return; account_id = RFIFOL(fd,4); memcpy(&msg, RFIFOP(fd,8), sizeof(struct mail_message)); // Try to find the Dest Char by Name Sql_EscapeStringLen(sql_handle, esc_name, msg.dest_name, strnlen(msg.dest_name, NAME_LENGTH)); if ( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`, `char_id` FROM `%s` WHERE `name` = '%s'", char_db, esc_name) ) Sql_ShowDebug(sql_handle); else if ( SQL_SUCCESS == Sql_NextRow(sql_handle) ) { char *data; Sql_GetData(sql_handle, 0, &data, NULL); if (atoi(data) != account_id) { // Cannot send mail to char in the same account Sql_GetData(sql_handle, 1, &data, NULL); msg.dest_id = atoi(data); } } Sql_FreeResult(sql_handle); msg.status = MAIL_NEW; if( msg.dest_id > 0 ) msg.id = mail_savemessage(&msg); mapif_Mail_send(fd, &msg); }
void mapif_parse_Mail_send(int fd) { struct mail_message msg; char esc_name[NAME_LENGTH*2+1]; char *data; size_t len; if(RFIFOW(fd,2) != 8 + sizeof(struct mail_message)) return; memcpy(&msg, RFIFOP(fd,8), sizeof(struct mail_message)); if( msg.dest_id != 0 ){ if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`, `name` FROM `%s` WHERE `char_id` = '%u'", schema_config.char_db, msg.dest_id) ){ Sql_ShowDebug(sql_handle); return; } msg.dest_id = 0; msg.dest_name[0] = '\0'; if( SQL_SUCCESS == Sql_NextRow(sql_handle) ){ Sql_GetData(sql_handle, 0, &data, NULL); msg.dest_id = atoi(data); Sql_GetData(sql_handle, 1, &data, &len); safestrncpy(msg.dest_name, data, NAME_LENGTH); } Sql_FreeResult(sql_handle); } // Try to find the Dest Char by Name Sql_EscapeStringLen(sql_handle, esc_name, msg.dest_name, strnlen(msg.dest_name, NAME_LENGTH)); if ( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`, `char_id` FROM `%s` WHERE `name` = '%s'", schema_config.char_db, esc_name) ){ Sql_ShowDebug(sql_handle); }else if ( SQL_SUCCESS == Sql_NextRow(sql_handle) ){ #if PACKETVER < 20150513 uint32 account_id = RFIFOL(fd,4); Sql_GetData(sql_handle, 0, &data, NULL); if (atoi(data) != account_id) { // Cannot send mail to char in the same account Sql_GetData(sql_handle, 1, &data, NULL); msg.dest_id = atoi(data); } #else // In RODEX you can even send mails to yourself Sql_GetData(sql_handle, 1, &data, NULL); msg.dest_id = atoi(data); #endif } Sql_FreeResult(sql_handle); msg.status = MAIL_NEW; if( msg.dest_id > 0 ) msg.id = mail_savemessage(&msg); mapif_Mail_send(fd, &msg); // notify sender mapif_Mail_new(&msg); // notify recipient }