bool CPythonNetworkStream::SendShopBuyPacket(BYTE bPos) { if (!__CanActMainInstance()) return true; TPacketCGShop PacketShop; PacketShop.header = HEADER_CG_SHOP; PacketShop.subheader = SHOP_SUBHEADER_CG_BUY; if (!Send(sizeof(TPacketCGShop), &PacketShop)) { Tracef("SendShopBuyPacket Error\n"); return false; } BYTE bCount=1; if (!Send(sizeof(BYTE), &bCount)) { Tracef("SendShopBuyPacket Error\n"); return false; } if (!Send(sizeof(BYTE), &bPos)) { Tracef("SendShopBuyPacket Error\n"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendShopSellPacketNew(BYTE bySlot, BYTE byCount) { if (!__CanActMainInstance()) return true; TPacketCGShop PacketShop; PacketShop.header = HEADER_CG_SHOP; PacketShop.subheader = SHOP_SUBHEADER_CG_SELL2; if (!Send(sizeof(TPacketCGShop), &PacketShop)) { Tracef("SendShopSellPacket Error\n"); return false; } if (!Send(sizeof(BYTE), &bySlot)) { Tracef("SendShopAddSellPacket Error\n"); return false; } if (!Send(sizeof(BYTE), &byCount)) { Tracef("SendShopAddSellPacket Error\n"); return false; } Tracef(" SendShopSellPacketNew(bySlot=%d, byCount=%d)\n", bySlot, byCount); return SendSequence(); }
bool CAccountConnector::__AuthState_SendPong() { TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; if (!Send(sizeof(kPacketPong), &kPacketPong)) return false; if (IsSecurityMode()) return SendSequence(); return true; }
bool CAccountConnector::SendNEWCIBNPasspodAnswerPacket(const char * answer) { TPacketCGNEWCIBNPasspodAnswer answerPacket; answerPacket.bHeader = HEADER_CG_NEWCIBN_PASSPOD_ANSWER; strncpy(answerPacket.szAnswer, answer, NEWCIBN_PASSPOD_ANSWER_MAX_LEN); answerPacket.szAnswer[NEWCIBN_PASSPOD_ANSWER_MAX_LEN] = '\0'; if (!Send(sizeof(answerPacket), &answerPacket)) { TraceError("SendNEWCIBNPasspodAnswerPacket"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendSafeBoxCheckoutPacket(BYTE bySafeBoxPos, TItemPos InventoryPos) { __PlaySafeBoxItemDropSound(bySafeBoxPos); TPacketCGSafeboxCheckout kSafeboxCheckout; kSafeboxCheckout.bHeader = HEADER_CG_SAFEBOX_CHECKOUT; kSafeboxCheckout.bSafePos = bySafeBoxPos; kSafeboxCheckout.ItemPos = InventoryPos; if (!Send(sizeof(kSafeboxCheckout), &kSafeboxCheckout)) return false; return SendSequence(); }
bool CPythonNetworkStream::SendSafeBoxCheckinPacket(TItemPos InventoryPos, BYTE bySafeBoxPos) { __PlayInventoryItemDropSound(InventoryPos); TPacketCGSafeboxCheckin kSafeboxCheckin; kSafeboxCheckin.bHeader = HEADER_CG_SAFEBOX_CHECKIN; kSafeboxCheckin.ItemPos = InventoryPos; kSafeboxCheckin.bSafePos = bySafeBoxPos; if (!Send(sizeof(kSafeboxCheckin), &kSafeboxCheckin)) return false; return SendSequence(); }
////////////////////////////////////////////////////////////////////////// // Mall bool CPythonNetworkStream::SendMallCheckoutPacket(BYTE byMallPos, TItemPos InventoryPos) { __PlayMallItemDropSound(byMallPos); TPacketCGMallCheckout kMallCheckoutPacket; kMallCheckoutPacket.bHeader = HEADER_CG_MALL_CHECKOUT; kMallCheckoutPacket.bMallPos = byMallPos; kMallCheckoutPacket.ItemPos = InventoryPos; if (!Send(sizeof(kMallCheckoutPacket), &kMallCheckoutPacket)) return false; return SendSequence(); }
bool CAccountConnector::SendRunupMatrixCardPacket(const char * c_szMatrixCardString) { TPacketCGRunupMatrixAnswer answerPacket; answerPacket.bHeader = HEADER_CG_RUNUP_MATRIX_ANSWER; strncpy(answerPacket.szAnswer, c_szMatrixCardString, RUNUP_MATRIX_ANSWER_MAX_LEN); answerPacket.szAnswer[RUNUP_MATRIX_ANSWER_MAX_LEN] = '\0'; if (!Send(sizeof(answerPacket), &answerPacket)) { TraceError("SendRunupMatrixCardPacketError"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount) { __PlaySafeBoxItemDropSound(bySourcePos); TPacketCGItemMove kItemMove; kItemMove.header = HEADER_CG_SAFEBOX_ITEM_MOVE; kItemMove.pos = TItemPos(INVENTORY, bySourcePos); kItemMove.num = byCount; kItemMove.change_pos = TItemPos(INVENTORY, byTargetPos); if (!Send(sizeof(kItemMove), &kItemMove)) return false; return SendSequence(); }
bool CPythonNetworkStream::SendSelectCharacterPacket(BYTE Index) { TPacketCGSelectCharacter SelectCharacterPacket; SelectCharacterPacket.header = HEADER_CG_PLAYER_SELECT; SelectCharacterPacket.player_index = Index; if (!Send(sizeof(TPacketCGSelectCharacter), &SelectCharacterPacket)) { Tracen("SendSelectCharacterPacket - Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendChangeNamePacket(BYTE index, const char *name) { TPacketCGChangeName ChangeNamePacket; ChangeNamePacket.header = HEADER_CG_CHANGE_NAME; ChangeNamePacket.index = index; strncpy(ChangeNamePacket.name, name, CHARACTER_NAME_MAX_LEN); if (!Send(sizeof(TPacketCGChangeName), &ChangeNamePacket)) { Tracen("Failed to SendChangeNamePacket"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendSelectEmpirePacket(DWORD dwEmpireID) { TPacketCGEmpire kPacketEmpire; kPacketEmpire.bHeader=HEADER_CG_EMPIRE; kPacketEmpire.bEmpire=dwEmpireID; if (!Send(sizeof(kPacketEmpire), &kPacketEmpire)) { Tracen("SendSelectEmpirePacket - Error"); return false; } SetEmpireID(dwEmpireID); return SendSequence(); }
bool CPythonNetworkStream::SendDestroyCharacterPacket(BYTE index, const char * szPrivateCode) { TPacketCGDestroyCharacter DestroyCharacterPacket; DestroyCharacterPacket.header = HEADER_CG_PLAYER_DESTROY; DestroyCharacterPacket.index = index; strncpy(DestroyCharacterPacket.szPrivateCode, szPrivateCode, PRIVATE_CODE_LENGTH-1); if (!Send(sizeof(TPacketCGDestroyCharacter), &DestroyCharacterPacket)) { Tracen("SendDestroyCharacterPacket"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendShopEndPacket() { if (!__CanActMainInstance()) return true; TPacketCGShop packet_shop; packet_shop.header = HEADER_CG_SHOP; packet_shop.subheader = SHOP_SUBHEADER_CG_END; if (!Send(sizeof(packet_shop), &packet_shop)) { Tracef("SendShopEndPacket Error\n"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendItemPickUpPacket(DWORD vid) { if (!__CanActMainInstance()) return true; TPacketCGItemPickUp itemPickUpPacket; itemPickUpPacket.header = HEADER_CG_ITEM_PICKUP; itemPickUpPacket.vid = vid; if (!Send(sizeof(TPacketCGItemPickUp), &itemPickUpPacket)) { Tracen("SendItemPickUpPacket Error"); return false; } return SendSequence(); }
bool CGuildMarkUploader::__LoginState_RecvPing() { TPacketGCPing kPacketPing; if (!Recv(sizeof(kPacketPing), &kPacketPing)) return false; TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; if (!Send(sizeof(TPacketCGPong), &kPacketPong)) return false; if (IsSecurityMode()) return SendSequence(); else return true; }
bool CPythonNetworkStream::SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num) { if (!__CanActMainInstance()) return true; if (__IsEquipItemInSlot(pos)) { if (CPythonExchange::Instance().isTrading()) { if (pos.IsEquipCell() || change_pos.IsEquipCell()) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_EXCHANGE")); return true; } } if (CPythonShop::Instance().IsOpen()) { if (pos.IsEquipCell() || change_pos.IsEquipCell()) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_SHOP")); return true; } } if (__IsPlayerAttacking()) return true; } __PlayInventoryItemDropSound(pos); TPacketCGItemMove itemMovePacket; itemMovePacket.header = HEADER_CG_ITEM_MOVE; itemMovePacket.pos = pos; itemMovePacket.change_pos = change_pos; itemMovePacket.num = num; if (!Send(sizeof(TPacketCGItemMove), &itemMovePacket)) { Tracen("SendItemMovePacket Error"); return false; } return SendSequence(); }
bool CAccountConnector::SendChinaMatrixCardPacket(const char * c_szMatrixCardString) { TPacketCGChinaMatrixCard MatrixCardPacket; MatrixCardPacket.bHeader = HEADER_CG_CHINA_MATRIX_CARD; strncpy(MatrixCardPacket.szAnswer, c_szMatrixCardString, CHINA_MATRIX_ANSWER_MAX_LEN); MatrixCardPacket.szAnswer[CHINA_MATRIX_ANSWER_MAX_LEN] = '\0'; if (!Send(sizeof(MatrixCardPacket), &MatrixCardPacket)) { Tracen("SendLogin Error"); return false; } CPythonNetworkStream::Instance().SetWaitFlag(); m_isWaitKey = TRUE; return SendSequence(); }
bool CPythonNetworkStream::SendItemDropPacket(TItemPos pos, DWORD elk) { if (!__CanActMainInstance()) return true; TPacketCGItemDrop itemDropPacket; itemDropPacket.header = HEADER_CG_ITEM_DROP; itemDropPacket.pos = pos; itemDropPacket.elk = elk; if (!Send(sizeof(TPacketCGItemDrop), &itemDropPacket)) { Tracen("SendItemDropPacket Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendQuickSlotDelPacket(BYTE pos) { if (!__CanActMainInstance()) return true; TPacketCGQuickSlotDel quickSlotDelPacket; quickSlotDelPacket.header = HEADER_CG_QUICKSLOT_DEL; quickSlotDelPacket.pos = pos; if (!Send(sizeof(TPacketCGQuickSlotDel), &quickSlotDelPacket)) { Tracen("SendQuickSlotDelPacket Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count) { if (!__CanActMainInstance()) return true; TPacketCGItemDrop2 itemDropPacket; itemDropPacket.header = HEADER_CG_ITEM_DROP2; itemDropPacket.pos = pos; itemDropPacket.gold = elk; itemDropPacket.count = count; if (!Send(sizeof(itemDropPacket), &itemDropPacket)) { Tracen("SendItemDropPacket Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendQuickSlotMovePacket(BYTE pos, BYTE change_pos) { if (!__CanActMainInstance()) return true; TPacketCGQuickSlotSwap quickSlotSwapPacket; quickSlotSwapPacket.header = HEADER_CG_QUICKSLOT_SWAP; quickSlotSwapPacket.pos = pos; quickSlotSwapPacket.change_pos = change_pos; if (!Send(sizeof(TPacketCGQuickSlotSwap), &quickSlotSwapPacket)) { Tracen("SendQuickSlotSwapPacket Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::SendQuickSlotAddPacket(BYTE wpos, BYTE type, BYTE pos) { if (!__CanActMainInstance()) return true; TPacketCGQuickSlotAdd quickSlotAddPacket; quickSlotAddPacket.header = HEADER_CG_QUICKSLOT_ADD; quickSlotAddPacket.pos = wpos; quickSlotAddPacket.slot.Type = type; quickSlotAddPacket.slot.Position = pos; if (!Send(sizeof(TPacketCGQuickSlotAdd), &quickSlotAddPacket)) { Tracen("SendQuickSlotAddPacket Error"); return false; } return SendSequence(); }
bool CPythonNetworkStream::RecvPingPacket() { Tracef("recv ping packet. (securitymode %u)\n", IsSecurityMode()); TPacketGCPing kPacketPing; if (!Recv(sizeof(TPacketGCPing), &kPacketPing)) return false; m_dwLastGamePingTime = ELTimer_GetMSec(); TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; if (!Send(sizeof(TPacketCGPong), &kPacketPong)) return false; if (IsSecurityMode()) return SendSequence(); else return true; }
bool CPythonNetworkStream::SendItemUseToItemPacket(TItemPos source_pos, TItemPos target_pos) { if (!__CanActMainInstance()) return true; TPacketCGItemUseToItem itemUseToItemPacket; itemUseToItemPacket.header = HEADER_CG_ITEM_USE_TO_ITEM; itemUseToItemPacket.source_pos = source_pos; itemUseToItemPacket.target_pos = target_pos; if (!Send(sizeof(TPacketCGItemUseToItem), &itemUseToItemPacket)) { Tracen("SendItemUseToItemPacket Error"); return false; } #ifdef _DEBUG Tracef(" << SendItemUseToItemPacket(src=%d, dst=%d)\n", source_pos, target_pos); #endif return SendSequence(); }
bool CPythonNetworkStream::SendCreateCharacterPacket(BYTE index, const char *name, BYTE job, BYTE shape, BYTE byCON, BYTE byINT, BYTE bySTR, BYTE byDEX) { TPacketCGCreateCharacter createCharacterPacket; createCharacterPacket.header = HEADER_CG_PLAYER_CREATE; createCharacterPacket.index = index; strncpy(createCharacterPacket.name, name, CHARACTER_NAME_MAX_LEN); createCharacterPacket.job = job; createCharacterPacket.shape = shape; createCharacterPacket.CON = byCON; createCharacterPacket.INT = byINT; createCharacterPacket.STR = bySTR; createCharacterPacket.DEX = byDEX; if (!Send(sizeof(TPacketCGCreateCharacter), &createCharacterPacket)) { Tracen("Failed to SendCreateCharacterPacket"); return false; } return SendSequence(); }
void InterpretEscSeq( void ) { int i; WORD attribut; CONSOLE_SCREEN_BUFFER_INFO Info; CONSOLE_CURSOR_INFO CursInfo; DWORD len, NumberOfCharsWritten; COORD Pos; SMALL_RECT Rect; CHAR_INFO CharInfo; if (prefix == '[') { if (prefix2 == '?' && (suffix == 'h' || suffix == 'l')) { if (es_argc == 1 && es_argv[0] == 25) { GetConsoleCursorInfo( hConOut, &CursInfo ); CursInfo.bVisible = (suffix == 'h'); SetConsoleCursorInfo( hConOut, &CursInfo ); return; } } // Ignore any other \e[? or \e[> sequences. if (prefix2 != 0) return; GetConsoleScreenBufferInfo( hConOut, &Info ); switch (suffix) { case 'm': if (es_argc == 0) es_argv[es_argc++] = 0; for (i = 0; i < es_argc; i++) { switch (es_argv[i]) { case 0: foreground = org_fg; background = org_bg; bold = (es_argc == 1) ? org_bold : 0; underline = (es_argc == 1) ? org_ul : 0; rvideo = 0; concealed = 0; break; case 1: bold = FOREGROUND_INTENSITY; break; case 5: /* blink */ case 4: underline = BACKGROUND_INTENSITY; break; case 7: rvideo = 1; break; case 8: concealed = 1; break; case 21: bold = 0; break; case 25: case 24: underline = 0; break; case 27: rvideo = 0; break; case 28: concealed = 0; break; } if (30 <= es_argv[i] && es_argv[i] <= 37) foreground = es_argv[i]-30; if (40 <= es_argv[i] && es_argv[i] <= 47) background = es_argv[i]-40; } if (concealed) { if (rvideo) { attribut = foregroundcolor[foreground] | backgroundcolor[foreground]; if (bold) attribut |= FOREGROUND_INTENSITY | BACKGROUND_INTENSITY; } else { attribut = foregroundcolor[background] | backgroundcolor[background]; if (underline) attribut |= FOREGROUND_INTENSITY | BACKGROUND_INTENSITY; } } else if (rvideo) { attribut = foregroundcolor[background] | backgroundcolor[foreground]; if (bold) attribut |= BACKGROUND_INTENSITY; if (underline) attribut |= FOREGROUND_INTENSITY; } else attribut = foregroundcolor[foreground] | backgroundcolor[background] | bold | underline; SetConsoleTextAttribute( hConOut, attribut ); return; case 'J': if (es_argc == 0) es_argv[es_argc++] = 0; // ESC[J == ESC[0J if (es_argc != 1) return; switch (es_argv[0]) { case 0: // ESC[0J erase from cursor to end of display len = (Info.dwSize.Y - Info.dwCursorPosition.Y - 1) * Info.dwSize.X + Info.dwSize.X - Info.dwCursorPosition.X - 1; FillConsoleOutputCharacter( hConOut, ' ', len, Info.dwCursorPosition, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Info.dwCursorPosition, &NumberOfCharsWritten ); return; case 1: // ESC[1J erase from start to cursor. Pos.X = 0; Pos.Y = 0; len = Info.dwCursorPosition.Y * Info.dwSize.X + Info.dwCursorPosition.X + 1; FillConsoleOutputCharacter( hConOut, ' ', len, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Pos, &NumberOfCharsWritten ); return; case 2: // ESC[2J Clear screen and home cursor Pos.X = 0; Pos.Y = 0; len = Info.dwSize.X * Info.dwSize.Y; FillConsoleOutputCharacter( hConOut, ' ', len, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Pos, &NumberOfCharsWritten ); SetConsoleCursorPosition( hConOut, Pos ); return; default: return; } case 'K': if (es_argc == 0) es_argv[es_argc++] = 0; // ESC[K == ESC[0K if (es_argc != 1) return; switch (es_argv[0]) { case 0: // ESC[0K Clear to end of line len = Info.srWindow.Right - Info.dwCursorPosition.X + 1; FillConsoleOutputCharacter( hConOut, ' ', len, Info.dwCursorPosition, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Info.dwCursorPosition, &NumberOfCharsWritten ); return; case 1: // ESC[1K Clear from start of line to cursor Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; FillConsoleOutputCharacter( hConOut, ' ', Info.dwCursorPosition.X + 1, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, Info.dwCursorPosition.X + 1, Pos, &NumberOfCharsWritten ); return; case 2: // ESC[2K Clear whole line. Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; FillConsoleOutputCharacter( hConOut, ' ', Info.dwSize.X, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, Info.dwSize.X, Pos, &NumberOfCharsWritten ); return; default: return; } case 'L': // ESC[#L Insert # blank lines. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[L == ESC[1L if (es_argc != 1) return; Rect.Left = 0; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwSize.Y - 1; Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'M': // ESC[#M Delete # lines. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[M == ESC[1M if (es_argc != 1) return; if (es_argv[0] > Info.dwSize.Y - Info.dwCursorPosition.Y) es_argv[0] = Info.dwSize.Y - Info.dwCursorPosition.Y; Rect.Left = 0; Rect.Top = Info.dwCursorPosition.Y + es_argv[0]; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwSize.Y - 1; Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'P': // ESC[#P Delete # characters. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[P == ESC[1P if (es_argc != 1) return; if (Info.dwCursorPosition.X + es_argv[0] > Info.dwSize.X - 1) es_argv[0] = Info.dwSize.X - Info.dwCursorPosition.X; Rect.Left = Info.dwCursorPosition.X + es_argv[0]; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Info.dwCursorPosition, &CharInfo ); return; case '@': // ESC[#@ Insert # blank characters. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[@ == ESC[1@ if (es_argc != 1) return; if (Info.dwCursorPosition.X + es_argv[0] > Info.dwSize.X - 1) es_argv[0] = Info.dwSize.X - Info.dwCursorPosition.X; Rect.Left = Info.dwCursorPosition.X; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1 - es_argv[0]; Rect.Bottom = Info.dwCursorPosition.Y; Pos.X = Info.dwCursorPosition.X + es_argv[0]; Pos.Y = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'A': // ESC[#A Moves cursor up # lines if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[A == ESC[1A if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y - es_argv[0]; if (Pos.Y < 0) Pos.Y = 0; Pos.X = Info.dwCursorPosition.X; SetConsoleCursorPosition( hConOut, Pos ); return; case 'B': // ESC[#B Moves cursor down # lines if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[B == ESC[1B if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; Pos.X = Info.dwCursorPosition.X; SetConsoleCursorPosition( hConOut, Pos ); return; case 'C': // ESC[#C Moves cursor forward # spaces if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[C == ESC[1C if (es_argc != 1) return; Pos.X = Info.dwCursorPosition.X + es_argv[0]; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'D': // ESC[#D Moves cursor back # spaces if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[D == ESC[1D if (es_argc != 1) return; Pos.X = Info.dwCursorPosition.X - es_argv[0]; if (Pos.X < 0) Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'E': // ESC[#E Moves cursor down # lines, column 1. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[E == ESC[1E if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; Pos.X = 0; SetConsoleCursorPosition( hConOut, Pos ); return; case 'F': // ESC[#F Moves cursor up # lines, column 1. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[F == ESC[1F if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y - es_argv[0]; if (Pos.Y < 0) Pos.Y = 0; Pos.X = 0; SetConsoleCursorPosition( hConOut, Pos ); return; case 'G': // ESC[#G Moves cursor column # in current row. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[G == ESC[1G if (es_argc != 1) return; Pos.X = es_argv[0] - 1; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; if (Pos.X < 0) Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'f': // ESC[#;#f case 'H': // ESC[#;#H Moves cursor to line #, column # if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[H == ESC[1;1H if (es_argc == 1) es_argv[es_argc++] = 1; // ESC[#H == ESC[#;1H if (es_argc > 2) return; Pos.X = es_argv[1] - 1; if (Pos.X < 0) Pos.X = 0; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; Pos.Y = es_argv[0] - 1; if (Pos.Y < 0) Pos.Y = 0; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; SetConsoleCursorPosition( hConOut, Pos ); return; case 's': // ESC[s Saves cursor position for recall later if (es_argc != 0) return; SavePos = Info.dwCursorPosition; return; case 'u': // ESC[u Return to saved cursor position if (es_argc != 0) return; SetConsoleCursorPosition( hConOut, SavePos ); return; case 'n': // ESC[#n Device status report if (es_argc != 1) return; // ESC[n == ESC[0n -> ignored switch (es_argv[0]) { case 5: // ESC[5n Report status SendSequence( L"\33[0n" ); // "OK" return; case 6: // ESC[6n Report cursor position { TCHAR buf[32]; wsprintf( buf, L"\33[%d;%dR", Info.dwCursorPosition.Y + 1, Info.dwCursorPosition.X + 1 ); SendSequence( buf ); } return; default: return; } case 't': // ESC[#t Window manipulation if (es_argc != 1) return; if (es_argv[0] == 21) // ESC[21t Report xterm window's title { TCHAR buf[MAX_PATH*2]; DWORD len = GetConsoleTitle( buf+3, lenof(buf)-3-2 ); // Too bad if it's too big or fails. buf[0] = ESC; buf[1] = ']'; buf[2] = 'l'; buf[3+len] = ESC; buf[3+len+1] = '\\'; buf[3+len+2] = '\0'; SendSequence( buf ); } return; default: return; } } else // (prefix == ']') { // Ignore any \e]? or \e]> sequences. if (prefix2 != 0) return; if (es_argc == 1 && es_argv[0] == 0) // ESC]0;titleST { SetConsoleTitle( Pt_arg ); } } }
bool CAccountConnector::__AuthState_RecvPhase() { TPacketGCPhase kPacketPhase; if (!Recv(sizeof(kPacketPhase), &kPacketPhase)) return false; if (kPacketPhase.phase == PHASE_HANDSHAKE) { __HandshakeState_Set(); } else if (kPacketPhase.phase == PHASE_AUTH) { #ifndef _IMPROVED_PACKET_ENCRYPTION_ const char* key = LocaleService_GetSecurityKey(); SetSecurityMode(true, key); #endif #ifdef USE_OPENID if (!openid_test) { //2012.07.19 OpenID : 김용욱 //Ongoing : 오픈 아이디 경우-> TPacketCGLogin5 //클라가 가지고 있는 인증키만을 서버에 보내도록. //const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //하드코딩 길이 32 TPacketCGLogin5 LoginPacket; LoginPacket.header = HEADER_CG_LOGIN5_OPENID; strncpy(LoginPacket.authKey, LocaleService_GetOpenIDAuthKey(), OPENID_AUTHKEY_LEN); LoginPacket.authKey[OPENID_AUTHKEY_LEN] = '\0'; for (DWORD i = 0; i < 4; ++i) LoginPacket.adwClientKey[i] = g_adwEncryptKey[i]; if (!Send(sizeof(LoginPacket), &LoginPacket)) { Tracen(" CAccountConnector::__AuthState_RecvPhase - SendLogin5 Error"); return false; } if (!SendSequence()) { return false; } } else { TPacketCGLogin3 LoginPacket; LoginPacket.header = HEADER_CG_LOGIN3; strncpy(LoginPacket.name, m_strID.c_str(), ID_MAX_NUM); strncpy(LoginPacket.pwd, m_strPassword.c_str(), PASS_MAX_NUM); LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); m_strPassword = ""; for (DWORD i = 0; i < 4; ++i) LoginPacket.adwClientKey[i] = g_adwEncryptKey[i]; if (!Send(sizeof(LoginPacket), &LoginPacket)) { Tracen(" CAccountConnector::__AuthState_RecvPhase - SendLogin3 Error"); return false; } if (!SendSequence()) { return false; } } #else /* USE_OPENID */ #ifdef USE_AHNLAB_HACKSHIELD HackShield_SetUserInfo(m_strID.c_str()); #endif #ifdef XTRAP_CLIENT_ENABLE XTrap_SetUserInfo(m_strID.c_str(), NULL, NULL, NULL, NULL); #endif TPacketCGLogin3 LoginPacket; LoginPacket.header = HEADER_CG_LOGIN3; strncpy(LoginPacket.name, m_strID.c_str(), ID_MAX_NUM); strncpy(LoginPacket.pwd, m_strPassword.c_str(), PASS_MAX_NUM); LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); m_strPassword = ""; for (DWORD i = 0; i < 4; ++i) LoginPacket.adwClientKey[i] = g_adwEncryptKey[i]; if (!Send(sizeof(LoginPacket), &LoginPacket)) { Tracen(" CAccountConnector::__AuthState_RecvPhase - SendLogin3 Error"); return false; } if (!SendSequence()) { return false; } #endif /* USE_OPENID */ __AuthState_Set(); } return true; }
void InterpretEscSeq( void ) { int i; WORD attribut; CONSOLE_SCREEN_BUFFER_INFO Info; CONSOLE_CURSOR_INFO CursInfo; DWORD len, NumberOfCharsWritten; COORD Pos; SMALL_RECT Rect; CHAR_INFO CharInfo; if (prefix == '[') { if (prefix2 == '?' && (suffix == 'h' || suffix == 'l')) { if (es_argc == 1 && es_argv[0] == 25) { GetConsoleCursorInfo( hConOut, &CursInfo ); CursInfo.bVisible = (suffix == 'h'); SetConsoleCursorInfo( hConOut, &CursInfo ); return; } } // Ignore any other \e[? or \e[> sequences. if (prefix2 != 0) return; GetConsoleScreenBufferInfo( hConOut, &Info ); switch (suffix) { case 'm': if (es_argc == 0) es_argv[es_argc++] = 0; for (i = 0; i < es_argc; i++) { if (30 <= es_argv[i] && es_argv[i] <= 37) grm.foreground = es_argv[i] - 30; else if (40 <= es_argv[i] && es_argv[i] <= 47) grm.background = es_argv[i] - 40; else switch (es_argv[i]) { case 0: case 39: case 49: { TCHAR def[4]; int a; *def = '7'; def[1] = '\0'; GetEnvironmentVariable( (LPCTSTR)L"ANSICON_DEF", def, lenof(def) ); a = wcstol( (const wchar_t*)def, NULL, 16 ); grm.reverse = FALSE; if (a < 0) { grm.reverse = TRUE; a = -a; } if (es_argv[i] != 49) grm.foreground = attr2ansi[a & 7]; if (es_argv[i] != 39) grm.background = attr2ansi[(a >> 4) & 7]; if (es_argv[i] == 0) { if (es_argc == 1) { grm.bold = a & FOREGROUND_INTENSITY; grm.underline = a & BACKGROUND_INTENSITY; } else { grm.bold = 0; grm.underline = 0; } grm.rvideo = 0; grm.concealed = 0; } } break; case 1: grm.bold = FOREGROUND_INTENSITY; break; case 5: // blink case 4: grm.underline = BACKGROUND_INTENSITY; break; case 7: grm.rvideo = 1; break; case 8: grm.concealed = 1; break; case 21: // oops, this actually turns on double underline case 22: grm.bold = 0; break; case 25: case 24: grm.underline = 0; break; case 27: grm.rvideo = 0; break; case 28: grm.concealed = 0; break; } } if (grm.concealed) { if (grm.rvideo) { attribut = foregroundcolor[grm.foreground] | backgroundcolor[grm.foreground]; if (grm.bold) attribut |= FOREGROUND_INTENSITY | BACKGROUND_INTENSITY; } else { attribut = foregroundcolor[grm.background] | backgroundcolor[grm.background]; if (grm.underline) attribut |= FOREGROUND_INTENSITY | BACKGROUND_INTENSITY; } } else if (grm.rvideo) { attribut = foregroundcolor[grm.background] | backgroundcolor[grm.foreground]; if (grm.bold) attribut |= BACKGROUND_INTENSITY; if (grm.underline) attribut |= FOREGROUND_INTENSITY; } else attribut = foregroundcolor[grm.foreground] | grm.bold | backgroundcolor[grm.background] | grm.underline; if (grm.reverse) attribut = ((attribut >> 4) & 15) | ((attribut & 15) << 4); SetConsoleTextAttribute( hConOut, attribut ); return; case 'J': if (es_argc == 0) es_argv[es_argc++] = 0; // ESC[J == ESC[0J if (es_argc != 1) return; switch (es_argv[0]) { case 0: // ESC[0J erase from cursor to end of display len = (Info.dwSize.Y - Info.dwCursorPosition.Y - 1) * Info.dwSize.X + Info.dwSize.X - Info.dwCursorPosition.X - 1; FillConsoleOutputCharacter( hConOut, ' ', len, Info.dwCursorPosition, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Info.dwCursorPosition, &NumberOfCharsWritten ); return; case 1: // ESC[1J erase from start to cursor. Pos.X = 0; Pos.Y = 0; len = Info.dwCursorPosition.Y * Info.dwSize.X + Info.dwCursorPosition.X + 1; FillConsoleOutputCharacter( hConOut, ' ', len, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Pos, &NumberOfCharsWritten ); return; case 2: // ESC[2J Clear screen and home cursor Pos.X = 0; Pos.Y = 0; len = Info.dwSize.X * Info.dwSize.Y; FillConsoleOutputCharacter( hConOut, ' ', len, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Pos, &NumberOfCharsWritten ); SetConsoleCursorPosition( hConOut, Pos ); return; default: return; } case 'K': if (es_argc == 0) es_argv[es_argc++] = 0; // ESC[K == ESC[0K if (es_argc != 1) return; switch (es_argv[0]) { case 0: // ESC[0K Clear to end of line len = Info.srWindow.Right - Info.dwCursorPosition.X + 1; FillConsoleOutputCharacter( hConOut, ' ', len, Info.dwCursorPosition, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, len, Info.dwCursorPosition, &NumberOfCharsWritten ); return; case 1: // ESC[1K Clear from start of line to cursor Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; FillConsoleOutputCharacter( hConOut, ' ', Info.dwCursorPosition.X + 1, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, Info.dwCursorPosition.X + 1, Pos, &NumberOfCharsWritten ); return; case 2: // ESC[2K Clear whole line. Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; FillConsoleOutputCharacter( hConOut, ' ', Info.dwSize.X, Pos, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, Info.dwSize.X, Pos, &NumberOfCharsWritten ); return; default: return; } case 'X': // ESC[#X Erase # characters. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[X == ESC[1X if (es_argc != 1) return; FillConsoleOutputCharacter( hConOut, ' ', es_argv[0], Info.dwCursorPosition, &NumberOfCharsWritten ); FillConsoleOutputAttribute( hConOut, Info.wAttributes, es_argv[0], Info.dwCursorPosition, &NumberOfCharsWritten ); return; case 'L': // ESC[#L Insert # blank lines. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[L == ESC[1L if (es_argc != 1) return; Rect.Left = 0; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwSize.Y - 1; Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'M': // ESC[#M Delete # lines. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[M == ESC[1M if (es_argc != 1) return; if (es_argv[0] > Info.dwSize.Y - Info.dwCursorPosition.Y) es_argv[0] = Info.dwSize.Y - Info.dwCursorPosition.Y; Rect.Left = 0; Rect.Top = Info.dwCursorPosition.Y + es_argv[0]; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwSize.Y - 1; Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'P': // ESC[#P Delete # characters. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[P == ESC[1P if (es_argc != 1) return; if (Info.dwCursorPosition.X + es_argv[0] > Info.dwSize.X - 1) es_argv[0] = Info.dwSize.X - Info.dwCursorPosition.X; Rect.Left = Info.dwCursorPosition.X + es_argv[0]; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1; Rect.Bottom = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Info.dwCursorPosition, &CharInfo ); return; case '@': // ESC[#@ Insert # blank characters. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[@ == ESC[1@ if (es_argc != 1) return; if (Info.dwCursorPosition.X + es_argv[0] > Info.dwSize.X - 1) es_argv[0] = Info.dwSize.X - Info.dwCursorPosition.X; Rect.Left = Info.dwCursorPosition.X; Rect.Top = Info.dwCursorPosition.Y; Rect.Right = Info.dwSize.X - 1 - es_argv[0]; Rect.Bottom = Info.dwCursorPosition.Y; Pos.X = Info.dwCursorPosition.X + es_argv[0]; Pos.Y = Info.dwCursorPosition.Y; CharInfo.Char.UnicodeChar = ' '; CharInfo.Attributes = Info.wAttributes; ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo ); return; case 'k': // ESC[#k case 'A': // ESC[#A Moves cursor up # lines if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[A == ESC[1A if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y - es_argv[0]; if (Pos.Y < 0) Pos.Y = 0; Pos.X = Info.dwCursorPosition.X; SetConsoleCursorPosition( hConOut, Pos ); return; case 'e': // ESC[#e case 'B': // ESC[#B Moves cursor down # lines if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[B == ESC[1B if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; Pos.X = Info.dwCursorPosition.X; SetConsoleCursorPosition( hConOut, Pos ); return; case 'a': // ESC[#a case 'C': // ESC[#C Moves cursor forward # spaces if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[C == ESC[1C if (es_argc != 1) return; Pos.X = Info.dwCursorPosition.X + es_argv[0]; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'j': // ESC[#j case 'D': // ESC[#D Moves cursor back # spaces if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[D == ESC[1D if (es_argc != 1) return; Pos.X = Info.dwCursorPosition.X - es_argv[0]; if (Pos.X < 0) Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'E': // ESC[#E Moves cursor down # lines, column 1. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[E == ESC[1E if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y + es_argv[0]; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; Pos.X = 0; SetConsoleCursorPosition( hConOut, Pos ); return; case 'F': // ESC[#F Moves cursor up # lines, column 1. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[F == ESC[1F if (es_argc != 1) return; Pos.Y = Info.dwCursorPosition.Y - es_argv[0]; if (Pos.Y < 0) Pos.Y = 0; Pos.X = 0; SetConsoleCursorPosition( hConOut, Pos ); return; case '`': // ESC[#` case 'G': // ESC[#G Moves cursor column # in current row. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[G == ESC[1G if (es_argc != 1) return; Pos.X = es_argv[0] - 1; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; if (Pos.X < 0) Pos.X = 0; Pos.Y = Info.dwCursorPosition.Y; SetConsoleCursorPosition( hConOut, Pos ); return; case 'd': // ESC[#d Moves cursor row #, current column. if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[d == ESC[1d if (es_argc != 1) return; Pos.Y = es_argv[0] - 1; if (Pos.Y < 0) Pos.Y = 0; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; SetConsoleCursorPosition( hConOut, Pos ); return; case 'f': // ESC[#;#f case 'H': // ESC[#;#H Moves cursor to line #, column # if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[H == ESC[1;1H if (es_argc == 1) es_argv[es_argc++] = 1; // ESC[#H == ESC[#;1H if (es_argc > 2) return; Pos.X = es_argv[1] - 1; if (Pos.X < 0) Pos.X = 0; if (Pos.X >= Info.dwSize.X) Pos.X = Info.dwSize.X - 1; Pos.Y = es_argv[0] - 1; if (Pos.Y < 0) Pos.Y = 0; if (Pos.Y >= Info.dwSize.Y) Pos.Y = Info.dwSize.Y - 1; SetConsoleCursorPosition( hConOut, Pos ); return; case 's': // ESC[s Saves cursor position for recall later if (es_argc != 0) return; SavePos = Info.dwCursorPosition; return; case 'u': // ESC[u Return to saved cursor position if (es_argc != 0) return; SetConsoleCursorPosition( hConOut, SavePos ); return; case 'n': // ESC[#n Device status report if (es_argc != 1) return; // ESC[n == ESC[0n -> ignored switch (es_argv[0]) { case 5: // ESC[5n Report status SendSequence( (LPTSTR)L"\33[0n" ); // "OK" return; case 6: // ESC[6n Report cursor position { TCHAR buf[32]; wsprintf( buf, (LPTSTR)L"\33[%d;%dR", Info.dwCursorPosition.Y + 1, Info.dwCursorPosition.X + 1 ); SendSequence( buf ); } return; default: return; } case 't': // ESC[#t Window manipulation if (es_argc != 1) return; if (es_argv[0] == 21) // ESC[21t Report xterm window's title { TCHAR buf[MAX_PATH*2]; DWORD len = GetConsoleTitle( buf+3, lenof(buf)-3-2 ); // Too bad if it's too big or fails. buf[0] = ESC; buf[1] = ']'; buf[2] = 'l'; buf[3+len] = ESC; buf[3+len+1] = '\\'; buf[3+len+2] = '\0'; SendSequence( buf ); } return; default: return; } } else // (prefix == ']') { // Ignore any \e]? or \e]> sequences. if (prefix2 != 0)