bool CsSynapseGroup::SetData(const std::string &strDataType, const std::string &strValue, bool bThrowError) { std::string strType = Std_CheckString(strDataType); if(Link::SetData(strDataType, strValue, false)) return true; if(strType == "INITWT") { InitWt(atof(strValue.c_str())); return true; } if(strType == "MAXWT") { MaxWt(atof(strValue.c_str())); return true; } if(strType == "PCONNECT") { Pconnect(atof(strValue.c_str())); return true; } if(strType == "MINDELAY") { MinDelay((unsigned char) atoi(strValue.c_str())); return true; } if(strType == "MAXDELAY") { MaxDelay((unsigned char) atoi(strValue.c_str())); return true; } if(strType == "PLASTIC") { Plastic(Std_ToBool(strValue)); return true; } //If it was not one of those above then we have a problem. if(bThrowError) THROW_PARAM_ERROR(Al_Err_lInvalidDataType, Al_Err_strInvalidDataType, "Data Type", strDataType); return false; }
void CsSynapseGroup::Load(CStdXml &oXml) { AnimatBase::Load(oXml); oXml.IntoElem(); //Into Synapse Element m_strFromID = oXml.GetChildString("FromID"); if(Std_IsBlank(m_strFromID)) THROW_TEXT_ERROR(Std_Err_lBlankAttrib, Std_Err_strBlankAttrib, "Attribute: FromID"); m_strToID = oXml.GetChildString("ToID"); if(Std_IsBlank(m_strToID)) THROW_TEXT_ERROR(Std_Err_lBlankAttrib, Std_Err_strBlankAttrib, "Attribute: ToID"); InitWt(oXml.GetChildFloat("InitWt", m_fltInitWt)); MaxWt(oXml.GetChildFloat("MaxWt", m_fltMaxWt)); Pconnect(oXml.GetChildFloat("Pconnect", m_fltPconnect)); MinDelay(oXml.GetChildInt("MinDelay", m_iMinDelay)); MaxDelay(oXml.GetChildInt("MaxDelay", m_iMaxDelay)); Plastic(oXml.GetChildBool("Plastic", m_bPlastic)); oXml.OutOfElem(); //OutOf Synapse Element }
void CommOpen(HWND HW, PTTSet ts, PComVar cv) { #ifdef NO_INET6 int Err; #endif /* NO_INET6 */ char ErrMsg[21+256]; char P[50+256]; MSG Msg; #ifndef NO_INET6 ADDRINFO hints; char pname[NI_MAXSERV]; #else char HEntBuff[MAXGETHOSTSTRUCT]; u_long addr; SOCKADDR_IN saddr; #endif /* NO_INET6 */ BOOL InvalidHost; #ifdef NO_INET6 BOOL BBuf; #endif /* NO_INET6 */ char uimsg[MAX_UIMSG]; // ホスト名が名前付きパイプかどうかを調べる。 if (ts->PortType == IdTCPIP) { if (CheckNamedPipeFormat(ts->HostName, strlen(ts->HostName)) == 0) { ts->PortType = IdNamedPipe; } } /* initialize ComVar */ cv->InBuffCount = 0; cv->InPtr = 0; cv->OutBuffCount = 0; cv->OutPtr = 0; cv->HWin = HW; cv->Ready = FALSE; cv->Open = FALSE; cv->PortType = ts->PortType; cv->ComPort = 0; cv->RetryCount = 0; #ifndef NO_INET6 cv->RetryWithOtherProtocol = TRUE; #endif /* NO_INET6 */ cv->s = INVALID_SOCKET; cv->ComID = INVALID_HANDLE_VALUE; cv->CanSend = TRUE; cv->RRQ = FALSE; cv->SendKanjiFlag = FALSE; cv->SendCode = IdASCII; cv->EchoKanjiFlag = FALSE; cv->EchoCode = IdASCII; cv->Language = ts->Language; cv->CRSend = ts->CRSend; cv->KanjiCodeEcho = ts->KanjiCode; cv->JIS7KatakanaEcho = ts->JIS7Katakana; cv->KanjiCodeSend = ts->KanjiCodeSend; cv->JIS7KatakanaSend = ts->JIS7KatakanaSend; cv->KanjiIn = ts->KanjiIn; cv->KanjiOut = ts->KanjiOut; cv->RussHost = ts->RussHost; cv->RussClient = ts->RussClient; cv->DelayFlag = TRUE; cv->DelayPerChar = ts->DelayPerChar; cv->DelayPerLine = ts->DelayPerLine; cv->TelBinRecv = FALSE; cv->TelBinSend = FALSE; cv->TelFlag = FALSE; cv->TelMode = FALSE; cv->IACFlag = FALSE; cv->TelCRFlag = FALSE; cv->TelCRSend = FALSE; cv->TelCRSendEcho = FALSE; cv->TelAutoDetect = ts->TelAutoDetect; /* TTPLUG */ cv->Locale = ts->Locale; cv->locale = _create_locale(LC_ALL, cv->Locale); cv->CodePage = &ts->CodePage; cv->ConnetingTimeout = &ts->ConnectingTimeout; cv->LastSendTime = time(NULL); cv->LineModeBuffCount = 0; cv->Flush = FALSE; cv->FlushLen = 0; cv->TelLineMode = FALSE; if ((ts->PortType!=IdSerial) && (strlen(ts->HostName)==0)) { PostMessage(cv->HWin, WM_USER_COMMNOTIFY, 0, FD_CLOSE); return; } switch (ts->PortType) { case IdTCPIP: cv->TelFlag = (ts->Telnet > 0); if (ts->EnableLineMode) { cv->TelLineMode = TRUE; } if (! LoadWinsock()) { if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); get_lang_msg("MSG_WINSOCK_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot use winsock", ts->UILanguageFile); MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); } InvalidHost = TRUE; } else { TTXOpenTCP(); /* TTPLUG */ cv->Open = TRUE; #ifndef NO_INET6 /* resolving address */ memset(&hints, 0, sizeof(hints)); hints.ai_family = ts->ProtocolFamily; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; _snprintf_s(pname, sizeof(pname), _TRUNCATE, "%d", ts->TCPPort); HAsync = PWSAAsyncGetAddrInfo(HW, WM_USER_GETHOST, ts->HostName, pname, &hints, &cv->res0); if (HAsync == 0) InvalidHost = TRUE; else { cv->ComPort = 1; // set "getting host" flag // (see CVTWindow::OnSysCommand()) do { if (GetMessage(&Msg,0,0,0)) { if ((Msg.hwnd==HW) && ((Msg.message == WM_SYSCOMMAND) && ((Msg.wParam & 0xfff0) == SC_CLOSE) || (Msg.message == WM_COMMAND) && (LOWORD(Msg.wParam) == ID_FILE_EXIT) || (Msg.message == WM_CLOSE))) { /* Exit when the user closes Tera Term */ PWSACancelAsyncRequest(HAsync); CloseHandle(HAsync); HAsync = 0; cv->ComPort = 0; // clear "getting host" flag PostMessage(HW,Msg.message,Msg.wParam,Msg.lParam); return; } if (Msg.message != WM_USER_GETHOST) { /* Prosess messages */ TranslateMessage(&Msg); DispatchMessage(&Msg); } } else { return; } } while (Msg.message!=WM_USER_GETHOST); cv->ComPort = 0; // clear "getting host" flag CloseHandle(HAsync); HAsync = 0; InvalidHost = WSAGETASYNCERROR(Msg.lParam) != 0; } } /* if (!LoadWinsock()) */ if (InvalidHost) { if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); get_lang_msg("MSG_INVALID_HOST_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Invalid host", ts->UILanguageFile); MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); } goto BreakSC; } for (cv->res = cv->res0; cv->res; cv->res = cv->res->ai_next) { cv->s = OpenSocket(cv); if (cv->s == INVALID_SOCKET) { CloseSocket(cv->s); continue; } /* start asynchronous connect */ AsyncConnect(cv); break; /* break for-loop immediately */ } break; #else if ((ts->HostName[0] >= 0x30) && (ts->HostName[0] <= 0x39)) { addr = Pinet_addr(ts->HostName); InvalidHost = (addr == 0xffffffff); } else { HAsync = PWSAAsyncGetHostByName(HW,WM_USER_GETHOST, ts->HostName,HEntBuff,sizeof(HEntBuff)); if (HAsync == 0) InvalidHost = TRUE; else { cv->ComPort = 1; // set "getting host" flag // (see CVTWindow::OnSysCommand()) do { if (GetMessage(&Msg,0,0,0)) { if ((Msg.hwnd==HW) && ((Msg.message == WM_SYSCOMMAND) && ((Msg.wParam & 0xfff0) == SC_CLOSE) || (Msg.message == WM_COMMAND) && (LOWORD(Msg.wParam) == ID_FILE_EXIT) || (Msg.message == WM_CLOSE))) { /* Exit when the user closes Tera Term */ PWSACancelAsyncRequest(HAsync); HAsync = 0; cv->ComPort = 0; // clear "getting host" flag PostMessage(HW,Msg.message,Msg.wParam,Msg.lParam); return; } if (Msg.message != WM_USER_GETHOST) { /* Prosess messages */ TranslateMessage(&Msg); DispatchMessage(&Msg); } } else { return; } } while (Msg.message!=WM_USER_GETHOST); cv->ComPort = 0; // clear "getting host" flag HAsync = 0; InvalidHost = WSAGETASYNCERROR(Msg.lParam) != 0; if (! InvalidHost) { if (((PHOSTENT)HEntBuff)->h_addr_list != NULL) memcpy(&addr, ((PHOSTENT)HEntBuff)->h_addr_list[0],sizeof(addr)); else InvalidHost = TRUE; } } } if (InvalidHost) { if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); get_lang_msg("MSG_INVALID_HOST_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Invalid host", ts->UILanguageFile); MessageBox(cv->HWin, ts->UIMsg, uimsg, MB_TASKMODAL | MB_ICONEXCLAMATION); } } else { cv->s= Psocket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (cv->s==INVALID_SOCKET) { InvalidHost = TRUE; if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); get_lang_msg("MSG_COMM_TIMEOUT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot connect the host", ts->UILanguageFile); MessageBox(cv->HWin, ts->UIMsg, uimsg, MB_TASKMODAL | MB_ICONEXCLAMATION); } } else { BBuf = TRUE; Psetsockopt(cv->s,(int)SOL_SOCKET,SO_OOBINLINE,(char FAR *)&BBuf,sizeof(BBuf)); PWSAAsyncSelect(cv->s,cv->HWin,WM_USER_COMMOPEN, FD_CONNECT); saddr.sin_family = AF_INET; saddr.sin_port = Phtons(ts->TCPPort); saddr.sin_addr.s_addr = addr; memset(saddr.sin_zero,0,8); Err = Pconnect(cv->s,(LPSOCKADDR)&saddr,sizeof(saddr)); if (Err!=0 ) Err = PWSAGetLastError(); if (Err==WSAEWOULDBLOCK ) { /* Do nothing */ } else if (Err!=0 ) PostMessage(cv->HWin, WM_USER_COMMOPEN,0, MAKELONG(FD_CONNECT,Err)); } } } break; #endif /* NO_INET6 */ case IdSerial: InitFileIO(IdSerial); /* TTPLUG */ TTXOpenFile(); /* TTPLUG */ _snprintf_s(P, sizeof(P), _TRUNCATE, "COM%d", ts->ComPort); strncpy_s(ErrMsg, sizeof(ErrMsg),P, _TRUNCATE); strncpy_s(P, sizeof(P),"\\\\.\\", _TRUNCATE); strncat_s(P, sizeof(P),ErrMsg, _TRUNCATE); cv->ComID = PCreateFile(P,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL); if (cv->ComID == INVALID_HANDLE_VALUE ) { get_lang_msg("MSG_CANTOEPN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile); _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); } InvalidHost = TRUE; } else { cv->Open = TRUE; cv->ComPort = ts->ComPort; CommResetSerial(ts, cv, ts->ClearComBuffOnOpen); if (!ts->ClearComBuffOnOpen) { cv->RRQ = TRUE; } /* notify to VT window that Comm Port is open */ PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0); InvalidHost = FALSE; SetCOMFlag(ts->ComPort); } break; /* end of "case IdSerial:" */ case IdFile: InitFileIO(IdFile); /* TTPLUG */ TTXOpenFile(); /* TTPLUG */ cv->ComID = PCreateFile(ts->HostName,GENERIC_READ,0,NULL, OPEN_EXISTING,0,NULL); InvalidHost = (cv->ComID == INVALID_HANDLE_VALUE); if (InvalidHost) { if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); get_lang_msg("MSG_CANTOEPN_FILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open file", ts->UILanguageFile); MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); } } else { cv->Open = TRUE; PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0); } break; case IdNamedPipe: InitFileIO(IdNamedPipe); /* TTPLUG */ TTXOpenFile(); /* TTPLUG */ memset(P, 0, sizeof(P)); strncpy_s(P, sizeof(P), ts->HostName, _TRUNCATE); // 名前付きパイプが正しい書式かをチェックする。 if (CheckNamedPipeFormat(P, strlen(P)) < 0) { InvalidHost = TRUE; _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, "Invalid pipe name\n\n" "A valid pipe name has the form\n" "\"\\\\<ServerName>\\pipe\\<PipeName>\"", GetLastError()); get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); break; } cv->ComID = PCreateFile(P,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING, 0, // ブロッキングモードにする(FILE_FLAG_OVERLAPPED は指定しない) NULL); if (cv->ComID == INVALID_HANDLE_VALUE ) { get_lang_msg("MSG_CANTOEPN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile); _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); if (cv->NoMsg==0) { get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); } InvalidHost = TRUE; } else { cv->Open = TRUE; PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0); InvalidHost = FALSE; } break; /* end of "case IdNamedPipe:" */ } /* end of "switch" */