bool CItem::AddToGround(long lMapIndex, const PIXEL_POSITION & pos, bool skipOwnerCheck) { if (0 == lMapIndex) { sys_err("wrong map index argument: %d", lMapIndex); return false; } if (GetSectree()) { sys_err("sectree already assigned"); return false; } if (!skipOwnerCheck && m_pOwner) { sys_err("owner pointer not null"); return false; } LPSECTREE tree = SECTREE_MANAGER::instance().Get(lMapIndex, pos.x, pos.y); if (!tree) { sys_err("cannot find sectree by %dx%d", pos.x, pos.y); return false; } //tree->Touch(); SetWindow(GROUND); SetXYZ(pos.x, pos.y, pos.z); tree->InsertEntity(this); UpdateSectree(); Save(); return true; }
void CWarMap::OnKill(LPCHARACTER killer, LPCHARACTER ch) { if (m_bEnded) return; DWORD dwKillerGuild = 0; DWORD dwDeadGuild = 0; if (killer->GetGuild()) dwKillerGuild = killer->GetGuild()->GetID(); if (ch->GetGuild()) dwDeadGuild = ch->GetGuild()->GetID(); BYTE idx; sys_log(0, "WarMap::OnKill %u %u", dwKillerGuild, dwDeadGuild); if (!GetTeamIndex(dwKillerGuild, idx)) return; if (!GetTeamIndex(dwDeadGuild, idx)) return; switch (m_kMapInfo.bType) { case WAR_MAP_TYPE_NORMAL: SendGuildWarScore(dwKillerGuild, dwDeadGuild, 1, ch->GetLevel()); break; case WAR_MAP_TYPE_FLAG: { CAffect * pkAff = ch->FindAffect(AFFECT_WAR_FLAG); if (pkAff) { if (GetTeamIndex(pkAff->lApplyValue, idx)) AddFlag(idx, ch->GetX(), ch->GetY()); ch->RemoveAffect(AFFECT_WAR_FLAG); } } break; default: sys_err("unknown war map type %u index %d", m_kMapInfo.bType, m_kMapInfo.lMapIndex); break; } }
int main(int argc, char *argv[]) { int i, status; unsigned int n; char *cmd; char **args; char *envp[2]; int n_args = argc-2; char ncopia[17]; int **fds; char buffer[1024]; size_t len; if (argc < 3) err("usage: lancian n cmd arg1 arg2 ..."); envp[0] = (char *)ncopia; envp[1] = NULL; n = atoi(argv[1]); args = malloc((n_args+1)*sizeof(char *)); cmd = args[0] = argv[2]; args[n_args] = NULL; for (i = 1; i < n_args; ++i) args[i] = argv[i+2]; fds = malloc(n*sizeof(int *)); for (i = 0; i < n; ++i) { fds[i] = malloc(2*sizeof(int)); pipe(fds[i]); if (fork() == 0) { close(fds[i][0]); dup2(fds[i][1], 1); close(fds[i][1]); sprintf(ncopia, "NCOPIA=%d", i); if (execvpe(cmd, args, envp) == -1) sys_err("execvpe"); } } for (i = 0; i < n; ++i) { close(fds[i][1]); while ((len = read(fds[i][0], buffer, sizeof(buffer))) != 0) write(1, buffer, len); } printf("lancian: fine\n"); exit(0); }
LPDESC DESC_MANAGER::AcceptDesc(LPFDWATCH fdw, socket_t s) { socket_t desc; LPDESC newd; static struct sockaddr_in peer; static char host[MAX_HOST_LENGTH + 1]; if ((desc = socket_accept(s, &peer)) == -1) return NULL; strlcpy(host, inet_ntoa(peer.sin_addr), sizeof(host)); if (g_bAuthServer) { if (IsBanIP(peer.sin_addr)) { sys_log(0, "connection from %s was banned.", host); socket_close(desc); return NULL; } } if (!IsValidIP(admin_ip, host)) // admin_ip 에 등록된 IP 는 최대 사용자 수에 구애받지 않는다. { if (m_iSocketsConnected >= MAX_ALLOW_USER) { sys_err("max connection reached. MAX_ALLOW_USER = %d", MAX_ALLOW_USER); socket_close(desc); return NULL; } } newd = M2_NEW DESC; crc_t handshake = CreateHandshake(); if (!newd->Setup(fdw, desc, peer, ++m_iHandleCount, handshake)) { socket_close(desc); M2_DELETE(newd); return NULL; } m_map_handshake.insert(DESC_HANDSHAKE_MAP::value_type(handshake, newd)); m_map_handle.insert(DESC_HANDLE_MAP::value_type(newd->GetHandle(), newd)); m_set_pkDesc.insert(newd); ++m_iSocketsConnected; return (newd); }
int CPeerBase::Recv() { if (!m_inBuffer) { sys_err("input buffer nil"); return -1; } buffer_adjust_size(m_inBuffer, MAX_INPUT_LEN >> 2); int bytes_to_read = buffer_has_space(m_inBuffer); ssize_t bytes_read = socket_read(m_fd, (char *) buffer_write_peek(m_inBuffer), bytes_to_read); if (bytes_read < 0) { sys_err("socket_read failed %s", strerror(errno)); return -1; } else if (bytes_read == 0) return 0; buffer_write_proceed(m_inBuffer, bytes_read); m_BytesRemain = buffer_size(m_inBuffer); return 1; }
int main(int argc,char *argv[]) { if(argc < 2) { printf("./a.out filename\n"); exit(-1); } if(chmod(argv[1],0777)!= 0) { sys_err("chmod"); } return 0; }
static void keyCallback(int key, int action) { // TODO: add reentrant guard? if(!strlen(lua_keyCallbackFuncName)) return; lua_getglobal(LL, lua_keyCallbackFuncName); lua_pushnumber(LL, key); lua_pushnumber(LL, action); int rc = lua_pcall(LL, 2, 0, 0); if(rc) { const char* err = lua_tostring(LL, -1); fprintf(stderr, "failed calling lua keydown handler: %s\n", err); sys_err("keyCallback"); } // lua_pop(LL, 1); }
/* * reponse_brd recv broadcast msg from ac and update sysstat * */ static void proc_brd(struct msg_ac_brd_t *msg, int len, int proto) { assert(proto == MSG_PROTO_ETH); sys_debug("receive ac broadcast packet\n"); if(len < sizeof(*msg)) { sys_err("receive error msg ac broadcast packet\n"); return; } if(sysstat.isreg) _proc_brd_isreg(msg, len, proto); else _proc_brd(msg, len, proto); }
socket_t socket_accept(socket_t s, struct sockaddr_in *peer) { socket_t desc; socklen_t i; i = sizeof(*peer); if ((desc = accept(s, (struct sockaddr *) peer, &i)) == -1) { sys_err("accept: %s (fd %d)", strerror(errno), s); return -1; } if (desc >= 65500) { sys_err("SOCKET FD 65500 LIMIT! %d", desc); socket_close(s); return -1; } socket_nonblock(desc); socket_lingeroff(desc); return (desc); }
int start(int argc, char ** argv) { //extern const char * _malloc_options; //_malloc_options = "A"; if (lzo_init() != LZO_E_OK) { sys_err("lzo_init() failed"); return 0; } thecore_init(25, heartbeat); signal_timer_disable(); return 1; }
int marriage_get_married_time(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID()); if (!pMarriage) { sys_err("trying to get time for not married character"); lua_pushnumber(L, 0); return 1; } lua_pushnumber(L, get_global_time() - pMarriage->marry_time); return 1; }
/* Used to write process ID to file. Assume someone else will delete */ void log_pid(char *pidfile) { FILE *file; mode_t oldmask; oldmask = umask(022); file = fopen(pidfile, "w"); umask(oldmask); if(!file) { sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create process ID file: %s!", pidfile); return; } fprintf(file, "%d\n", (int) getpid()); fclose(file); }
int marriage_end_wedding(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID()); if (!pMarriage) { sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName()); return 0; } if (pMarriage->pWeddingInfo) { // 결혼식 끝내기 요청 pMarriage->RequestEndWedding(); } return 0; }
void CParty::P2PQuit(DWORD dwPID) { TMemberMap::iterator it = m_memberMap.find(dwPID); if (it == m_memberMap.end()) return; if (m_bPCParty) SendPartyRemoveOneToAll(dwPID); if (it == m_itNextOwner) IncreaseOwnership(); if (m_bPCParty) RemoveBonusForOne(dwPID); LPCHARACTER ch = it->second.pCharacter; BYTE bRole = it->second.bRole; m_memberMap.erase(it); sys_log(2, "PARTY[%d] MemberCountChange %d -> %d", GetLeaderPID(), GetMemberCount(), GetMemberCount() - 1); if (bRole < PARTY_ROLE_MAX_NUM) { --m_anRoleCount[bRole]; } else { sys_err("ROLE_COUNT_QUIT_ERROR: INDEX(%d) > MAX(%d)", bRole, PARTY_ROLE_MAX_NUM); } if (ch) { ch->SetParty(NULL); ComputeRolePoint(ch, bRole, false); } if (m_bPCParty) CPartyManager::instance().SetPartyMember(dwPID, NULL); // ё®ґх°Ў іЄ°Ўёй ЖДЖјґВ ЗШ»кµЗѕоѕЯ ЗСґЩ. if (bRole == PARTY_ROLE_LEADER) CPartyManager::instance().DeleteParty(this); // АМ ѕЖ·ЎґВ ДЪµеё¦ ГЯ°ЎЗПБц ё» °Н!!! А§ DeleteParty ЗПёй thisґВ ѕшґЩ. }
static void init_texture() { // create tex id glGenTextures(1, &_tex_id); if(_tex_id == 0) sys_err("glGenTextures() failed"); // define texture state for this tex object glBindTexture(GL_TEXTURE_2D, _tex_id); // define texture parameters /* glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); */ // only this one appears to be mandatory glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // create texture GLenum target = GL_TEXTURE_2D; GLint level = 0; GLint internalFormat = GL_RGBA8; GLsizei width = _img->width; GLsizei height = _img->height; GLint border = 0; GLenum format = GL_RGBA; GLenum type = GL_UNSIGNED_BYTE; const GLvoid* pixels = _img->pixels; glTexImage2D( target, level, internalFormat, width, height, border, format, type, pixels ); glEnable(GL_TEXTURE_2D); // do we need this? I think so glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); }
void CParty::P2PQuit(DWORD dwPID) { TMemberMap::iterator it = m_memberMap.find(dwPID); if (it == m_memberMap.end()) return; if (m_bPCParty) SendPartyRemoveOneToAll(dwPID); if (it == m_itNextOwner) IncreaseOwnership(); if (m_bPCParty) RemoveBonusForOne(dwPID); LPCHARACTER ch = it->second.pCharacter; BYTE bRole = it->second.bRole; m_memberMap.erase(it); sys_log(2, "PARTY[%d] MemberCountChange %d -> %d", GetLeaderPID(), GetMemberCount(), GetMemberCount() - 1); if (bRole < PARTY_ROLE_MAX_NUM) { --m_anRoleCount[bRole]; } else { sys_err("ROLE_COUNT_QUIT_ERROR: INDEX(%d) > MAX(%d)", bRole, PARTY_ROLE_MAX_NUM); } if (ch) { ch->SetParty(NULL); ComputeRolePoint(ch, bRole, false); } if (m_bPCParty) CPartyManager::instance().SetPartyMember(dwPID, NULL); // 리더가 나가면 파티는 해산되어야 한다. if (bRole == PARTY_ROLE_LEADER) CPartyManager::instance().DeleteParty(this); // 이 아래는 코드를 추가하지 말 것!!! 위 DeleteParty 하면 this는 없다. }
void CHorseNameManager::UpdateHorseName(DWORD dwPlayerID, const char* szHorseName, bool broadcast) { if ( szHorseName == NULL ) { sys_err("HORSE_NAME: NULL NAME (%u)", dwPlayerID); szHorseName = ""; } sys_log(0, "HORSENAME: update %u %s", dwPlayerID, szHorseName); m_mapHorseNames[dwPlayerID] = szHorseName; if ( broadcast == true ) { BroadcastHorseName(dwPlayerID, szHorseName); } }
void tfont_draw_text_buf() { if(!tfont_init()) sys_err("tfont not initialized"); // TODO: change to push/pop gl attribs as needed glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, _tex_id); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glVertexPointer(2, GL_FLOAT, 0, _verts); glTexCoordPointer(2, GL_FLOAT, 0, _tcoords); glDrawElements(GL_TRIANGLES, _num_tris * 3, GL_UNSIGNED_INT, _tris); glDisable(GL_TEXTURE_2D); }
int main(int argc, char *argv[]) { if(argc < 3) { printf("./a.out filename size\n"); exit(-1); } int size = atoi(argv[2]); if(access(argv[1],F_OK) != 0) creat(argv[1],0664); if(truncate(argv[1],size) < 0) sys_err("truncate"); return 0; }
int fdwatch(LPFDWATCH fdw, struct timeval *timeout) { int i, r; struct timespec ts; if (fdw->nkqevents) sys_log(2, "fdwatch: nkqevents %d", fdw->nkqevents); if (!timeout) { ts.tv_sec = 0; ts.tv_nsec = 0; r = kevent(fdw->kq, fdw->kqevents, fdw->nkqevents, fdw->kqrevents, fdw->nfiles, &ts); } else { ts.tv_sec = timeout->tv_sec; ts.tv_nsec = timeout->tv_usec; r = kevent(fdw->kq, fdw->kqevents, fdw->nkqevents, fdw->kqrevents, fdw->nfiles, &ts); } fdw->nkqevents = 0; if (r == -1) return -1; memset(fdw->fd_event_idx, 0, sizeof(int) * fdw->nfiles); for (i = 0; i < r; i++) { int fd = fdw->kqrevents[i].ident; if (fd >= fdw->nfiles) sys_err("ident overflow %d nfiles: %d", fdw->kqrevents[i].ident, fdw->nfiles); else { if (fdw->kqrevents[i].filter == EVFILT_WRITE) fdw->fd_event_idx[fd] = i; } } return (r); }
void interaction::traceIpHost(const char* ipHost) { //----------------------- // check if we over limit //----------------------- if(rLimitor->isOverLimit()) { // notify user dprintf(connfd, "*********************************************\n"); dprintf(connfd, "Making too many requests than you can\n"); dprintf(connfd, "%s\n",rLimitor->currentLimit()); dprintf(connfd, "*********************************************\n"); // log it extern eventsLog servLog; servLog.logIt("User from IP: %s (with pid %d)" " making too many requests\n", userIp(*clientAddr), getpid()); return; } //--------------------------------------------- // check if ip hinted by ipHost is valid or not //--------------------------------------------- if(strict) { if(!isValidIp(ipHost)) { return; } } pid_t child_pid; if((child_pid=fork())<0) { sys_err("call to fork() failed"); } else if(child_pid==0) { // in child // Close stuff from parents // redirect stderr and stdout to connfd Dup2(connfd, STDOUT_FILENO); Dup2(connfd, STDERR_FILENO); cout<<"------------------------------------------" <<"----------------------------------"<<endl; // call execlp 'NULL' must be provided execlp("traceroute","traceroute",ipHost, NULL); } else {// in parent if(VOMIT) { cout<<"client interaction process: "<<getpid() <<" forked a child with pid: "<<child_pid<<endl; } // block until child finish waitpid(child_pid, NULL, 0); } }
void CPartyManager::P2PJoinParty(DWORD leader, DWORD pid, BYTE role) { TPartyMap::iterator it = m_map_pkParty.find(leader); if (it != m_map_pkParty.end()) { it->second->P2PJoin(pid); if (role >= PARTY_ROLE_MAX_NUM) role = PARTY_ROLE_NORMAL; it->second->SetRole(pid, role, true); } else { sys_err("No such party with leader [%d]", leader); } }
void socket_lingeron(socket_t s) { #ifdef __WIN32__ int linger; linger = 0; #else struct linger linger; linger.l_onoff = 1; linger.l_linger = 0; #endif if (setsockopt(s, SOL_SOCKET, SO_LINGER, (const char*) &linger, sizeof(linger)) < 0) { sys_err("setsockopt: linger: %s", strerror(errno)); socket_close(s); return; } }
long CWarMapManager::CreateWarMap(const TGuildWarInfo& guildWarInfo, DWORD dwGuildID1, DWORD dwGuildID2) { TWarMapInfo * pkInfo = GetWarMapInfo(guildWarInfo.lMapIndex); if (!pkInfo) { sys_err("GuildWar.CreateWarMap.NOT_FOUND_MAPINFO[%d]", guildWarInfo.lMapIndex); return 0; } DWORD lMapIndex = SECTREE_MANAGER::instance().CreatePrivateMap(guildWarInfo.lMapIndex); if (lMapIndex) { m_mapWarMap.insert(std::make_pair(lMapIndex, M2_NEW CWarMap(lMapIndex, guildWarInfo, pkInfo, dwGuildID1, dwGuildID2))); } return lMapIndex; }
static void __init_rcv(int *sock) { int ret; pthread_mutex_init(&dllrcv.lock, NULL); dllrcv.rcvsock = __create_sock(0); if(sock) *sock = dllrcv.rcvsock; __build_rcvll(1); ret = bind(dllrcv.rcvsock, (struct sockaddr *)&dllrcv.ll, dllrcv.recvlen); if(ret < 0) { sys_err("Bind recive socket failed: %s\n", strerror(errno)); exit(-1); } }
static void tick() { // printf("BEG tick()\n"); lu_checkstack(L); lua_pushcfunction(L, tf_traceback); lua_getglobal(L, "tick"); int rc = lua_pcall(L, 0, 0, 1); if(rc) { const char* err = lua_tostring(L, -1); fprintf(stderr, "failed calling lua tick handler: %s\n", err); // lua_traceback(); sys_err("tick()"); } lua_pop(L, 1); lu_checkstack(L); // printf("END tick()\n"); }
bool IsScriptTrue(const char* code, int size) { if (size==0) return true; lua_State* L = CQuestManager::instance().GetLuaState(); int x = lua_gettop(L); int errcode = lua_dobuffer(L, code, size, "IsScriptTrue"); int bStart = lua_toboolean(L, -1); if (errcode) { char buf[100]; snprintf(buf, sizeof(buf), "LUA ScriptRunError (code:%%d src:[%%%ds])", size); sys_err(buf, errcode, code); } lua_settop(L,x); return bStart != 0; }
static void *report_apstatus(void *arg) { int ret; struct apstatus_t *ap; int bufsize = sizeof(struct msg_ap_status_t) + sizeof(struct apstatus_t); char *buf = calloc(1, bufsize); if(buf == 0) { sys_err("Malloc for report apstatus failed:%s ", strerror(errno)); exit(-1); } int proto; /* tcp do not use chap to protect */ fill_msg_header((void *)buf, MSG_AP_STATUS, NULL, 0); /* ap will first connect remote ac, but if * find local ac, ap will connect to local ac */ while(1) { proto = (sysstat.sock >= 0) ? MSG_PROTO_TCP : MSG_PROTO_ETH; if(proto == MSG_PROTO_ETH) { ac_reconnect(); goto wait; } ap = get_apstatus(); memcpy(buf + sizeof(struct msg_ap_status_t), ap, sizeof(struct apstatus_t)); ret = net_send(proto, sysstat.sock, sysstat.dmac, buf, bufsize); if(ret <= 0 && proto == MSG_PROTO_TCP) { ac_lost(); ac_reconnect(); } wait: sys_debug("report ap status (next %d seconds later)\n", argument.reportitv); sleep(argument.reportitv); } return NULL; }
int marriage_warp_to_my_marriage_map(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID()); if (!pMarriage) { sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName()); return 0; } //PREVENT_HACK if ( ch->IsHack() ) return 0; //END_PREVENT_HACK pMarriage->WarpToWeddingMap(ch->GetPlayerID()); return 0; }
int sql_init() { sql_account = sql_create(sql_addr, sql_user, sql_password, sql_db_name); if (!sql_account) { sys_err("cannot create sql_account"); return 0; } if (!sql_async_start(sql_account)) { sql_deinit(); return 0; } return 1; }