⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io.cpp

📁 mini http server,可以集成嵌入到程序中,实现简单的web功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			hWndAdd = GetDlgItem( hDlg, IDC_ADD );
			hWndReplace = GetDlgItem( hDlg, IDC_REPLACE );
			hWndDelete= GetDlgItem( hDlg, IDC_DELETE );
			hWndKeys= GetDlgItem( hDlg, IDC_NEW );

			assert( hWndList && hWndType && hWndHost && hWndPort );
			assert( hWndSend && hWndRecv );
			assert( hWndAdd && hWndReplace && hWndDelete );

			EnableWindow( hWndAdd, FALSE );
			EnableWindow( hWndReplace, FALSE );
			EnableWindow( hWndDelete, FALSE );
			EnableWindow( hWndKeys, FALSE );			
			/*
			** Add options to 'Types' combo-box
			*/
			int iTmp = 0;
			for(;; iTmp++ )
				{
				pTmp = AD_lookupValueEx( __pConfig, "Internal", 
					"IOTypes", iTmp );
				if ( !pTmp )
					{ break; };

				::SendMessage( hWndType, CB_ADDSTRING, 0, 
					(LPARAM)pTmp ); 
				};

			/*
			** Limit edit field lengths, really just a sanity thing
			*/
			SendMessage( hWndHost, EM_SETLIMITTEXT, 256, 0 );
			SendMessage( hWndPort, EM_SETLIMITTEXT, 256, 0 );
			SendMessage( hWndSend, EM_SETLIMITTEXT, 256, 0 );
			SendMessage( hWndRecv, EM_SETLIMITTEXT, 256, 0 );

			/*
			** Setup tabstops
			*/
			aTabstop[0] = 0;
			aTabstop[1] = 38;
			aTabstop[2] = 107;
			aTabstop[3] = 148;
			aTabstop[4] = 187;
			SendMessage( hWndList, LB_SETTABSTOPS, 5, (LPARAM)&aTabstop );

			/*
			** Load all mappings
			*/
			iTmp = 0;
			for(;; iTmp++ )
				{
				pTmp = AD_lookupValueEx( __pConfig, "IOObjects", 
					"IOObject", iTmp );
				if ( !pTmp )
					{ break; };

				if ( SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)pTmp )>=0 )
					{
					Internal_addLine( pTmp );
					}
				else
					{ break; /* error */; };
				};
			}

			AD_hourglassOff();
			break;

		case WM_DESTROY:
			{
			/*
			** Delete values
			*/
			DblListIterator x( lTypes );
			DblListIterator y( lHosts );
			DblListIterator z( lPorts );
			DblListIterator s( lSends );
			DblListIterator r( lRecvs );
			for( ; !x.BadIndex(); x++, y++, z++, s++, r++ )
				{
				assert( !x.BadIndex() && !y.BadIndex() && !z.BadIndex() 
					&& !s.BadIndex() && !r.BadIndex() );
				PI_DELETE( (PIString *)x.Current() );
				PI_DELETE( (PIString *)y.Current() );
				PI_DELETE( (PIString *)z.Current() );
				PI_DELETE( (PIString *)s.Current() );
				PI_DELETE( (PIString *)r.Current() );
				};
			lTypes.Clear();
			lHosts.Clear();
			lPorts.Clear();
			lSends.Clear();
			lRecvs.Clear();
			};
			break;

		case WM_COMMAND:
			switch (GET_WM_COMMAND_ID(wParam, lParam))
				{
				case IDC_ADD:
					{
					/*
					** Verify fields are valid
					*/
					if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
						{ break; };

					int i, j;
					*szBuf = '\0';

					SendMessage( hWndType, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
					for( i=0; i<BUF_SIZE && szBuf[i]!='\t' && szBuf[i]; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lTypes.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lHosts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lPorts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndSend, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lSends.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndRecv, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lRecvs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );					

					SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );

					/*
					** Clear edit fields, focus to list
					*/
					SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
					SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
					EnableWindow( hWndKeys, FALSE );					
					SetFocus( hWndList );
					AD_Changed( hDlg );
					};
					break;
	
				case IDC_REPLACE:
					{
					/*
					** Verify fields are valid
					*/
					if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
						{ break; };

					/*
					** Get selected item index 
					*/
					int iCurSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
					assert( iCurSel>=0 );

					/*
					** Get text to add and add it to internal lists only
					*/
					int i, j;
					*szBuf = '\0';

					SendMessage( hWndType, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
					for( i=0; i<BUF_SIZE && szBuf[i]!='\t' && szBuf[i]; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lTypes.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lHosts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lPorts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndSend, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lSends.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					szBuf[i++] = '\t';

					SendMessage( hWndRecv, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
					for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
					if ( szBuf[i] ) { szBuf[i] = '\0'; };
					lRecvs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
					
					/*
					** Delete the item from the list and internal lists
					*/
					SendMessage( hWndList, LB_DELETESTRING,	iCurSel, 0 );
					PI_DELETE( (PIString *)lTypes.Detach( iCurSel) );
					PI_DELETE( (PIString *)lHosts.Detach( iCurSel) );
					PI_DELETE( (PIString *)lPorts.Detach( iCurSel) );
					PI_DELETE( (PIString *)lSends.Detach( iCurSel) );
					PI_DELETE( (PIString *)lRecvs.Detach( iCurSel) );
					
					/*
					** Add new item to listbox
					*/
					SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );

					/*
					** Clear edit fields, focus to list
					*/
					SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
					SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
					SetFocus( hWndList );
					AD_Changed( hDlg );
					};
					break;

				case IDC_DELETE:
					{
					int iCurSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
					SendMessage( hWndList, LB_DELETESTRING,	iCurSel, 0 );
					PI_DELETE( (PIString *)lTypes.Detach( iCurSel ) );
					PI_DELETE( (PIString *)lHosts.Detach( iCurSel ) );
					PI_DELETE( (PIString *)lPorts.Detach( iCurSel ) );
					PI_DELETE( (PIString *)lSends.Detach( iCurSel ) );
					PI_DELETE( (PIString *)lRecvs.Detach( iCurSel ) );
			
					/*
					** Clear edit fields, focus to list
					*/
					SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
					SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
					SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
					SetFocus( hWndList );
					AD_Changed( hDlg );
					};
					break;

				case IDC_TYPE:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)!=CBN_SELCHANGE )
						{ break; };
					*szBuf = '\0';
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf ); 
					pTmp = szBuf + strlen(szBuf) + 1;
					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp ); 
					Internal_updateButtons( wParam, lParam, szBuf, pTmp, 1 );
					break;

				case IDC_HOSTNAME:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
						{ break; };
					*szBuf = '\0';
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf ); 
					pTmp = szBuf + strlen(szBuf) + 1;
					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp ); 
					Internal_updateButtons( wParam, lParam, szBuf, pTmp, 0 );
					break;

				case IDC_PORT:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
						{ break; };
					*szBuf = '\0';
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)szBuf );
					pTmp = szBuf + strlen(szBuf) + 1;
					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp ); 
					Internal_updateButtons( wParam, lParam, szBuf, pTmp, 0 );
					break;

				case IDC_SEND:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
						{ break; };
					break;

				case IDC_RECV:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
						{ break; };
					break;

				case IDC_LIST:
					if ( GET_WM_COMMAND_CMD(wParam, lParam)==LBN_SELCHANGE )
						{
						int iSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
						if ( iSel!=LB_ERR )
							{
							assert( iSel>=0 && iSel<lTypes.Size() );
							EnableWindow( hWndDelete, TRUE );
							int iIndex = SendMessage( hWndType, CB_FINDSTRINGEXACT, 
								(WPARAM)-1, 
								(LPARAM)(const char *)*((PIString *)lTypes[iSel]) );
							assert( iIndex>=0 );
							SendMessage( hWndType, CB_SETCURSEL, (WPARAM)
								(iIndex==CB_ERR ? -1 : iIndex), 0 );
							SendMessage( hWndHost, WM_SETTEXT, 0,
								(LPARAM)(const char *)*((PIString *)lHosts[iSel]) );
							SendMessage( hWndPort, WM_SETTEXT, 0,
								(LPARAM)(const char *)*((PIString *)lPorts[iSel]) );
							SendMessage( hWndSend, WM_SETTEXT, 0,
								(LPARAM)(const char *)*((PIString *)lSends[iSel]) );
							SendMessage( hWndRecv, WM_SETTEXT, 0,
								(LPARAM)(const char *)*((PIString *)lRecvs[iSel]) );
							};
						};
					break;

				case IDC_NEW:
					{
					DlgData data;
					pTmp = szBuf;

					// copy ssl servername
					data.pSslServername = pTmp;
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
					pTmp = data.pSslServername + strlen(data.pSslServername);
					pTmp++;

					// copy ssl private key filename
					data.pSslKeyFilename = pTmp;
					strcpy( (char *)pTmp, "./" );
					pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
					pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
					strcpy( (char *)pTmp, "_" );
					pTmp++;
					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
					pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
					strcpy( (char *)pTmp, "_key.pem" );
					pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename) + 1;

					// copy ssl certificate filename
					data.pSslCertFilename = pTmp;
					strcpy( (char *)pTmp, "./" );
					pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
					SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
					pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
					strcpy( (char *)pTmp++, "_" );
					SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
					pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
					strcpy( (char *)pTmp, "_cert.pem" );

					DialogBoxParam(
						::GetModuleHandle( NULL ),
						MAKEINTRESOURCE( IDD_GENKEYS ),
						hDlg,
						(DLGPROC)fnGenSslKeys,
						(LPARAM)&data
						);
					break;
					}

				default:;		
				}
			break;

		case WM_NOTIFY:
			{
			switch( ((NMHDR *)lParam)->code )
				{
				case PSN_SETACTIVE:
					{
					int i = *AD_lookupValue( __pConfig, "General", "ReuseThreads" ) ? 1 : 0;
					EnableWindow( hWndList, i ); EnableWindow( hWndType, i );
					EnableWindow( hWndHost, i ); EnableWindow( hWndPort, i );
					EnableWindow( hWndSend, i ); EnableWindow( hWndRecv, i );
					break;
					}

				case PSN_QUERYCANCEL:
					return AD_cancel( hDlg );

				case PSN_KILLACTIVE:
					{
					int i = 0;
					int iCurSel = ::SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
					int iCount = ::SendMessage( hWndList, LB_GETCOUNT, 0, 0 );

					/* --- remove old ones first --- */
					AD_deleteValue( __pConfig, "IOObjects", "IOObject" );

					/*
					** Save all mappings
					*/
					Internal_saveValues( hDlg );

					/*
					** Delete values
					*/
					DblListIterator x( lTypes );
					DblListIterator y( lHosts );
					DblListIterator z( lPorts );
					DblListIterator s( lSends );
					DblListIterator r( lRecvs );
					for( ; !x.BadIndex(); x++, y++, z++, s++, r++ )
						{
						assert( !x.BadIndex() && !y.BadIndex() && !z.BadIndex()
							&& !s.BadIndex() && !r.BadIndex() );
						PI_DELETE( (PIString *)x.Current() );
						PI_DELETE( (PIString *)y.Current() );
						PI_DELETE( (PIString *)z.Current() );
						PI_DELETE( (PIString *)s.Current() );
						PI_DELETE( (PIString *)r.Current() );
						};
					lTypes.Clear();
					lHosts.Clear();
					lPorts.Clear();
					lSends.Clear();
					lRecvs.Clear();

					/*
					** Load all mappings
					*/
					int iTmp = 0;
					const char *pTmp;
					for(;; iTmp++ )
						{
						pTmp = AD_lookupValueEx( __pConfig, "IOObjects", 
							"IOObject", iTmp );
						if ( !pTmp )
							{ break; };

						if ( SendMessage( hWndList, LB_ADDSTRING, 0,
							(LPARAM)pTmp )>=0 )
							{
							Internal_addLine( pTmp );
							}
						else
							{ break; /* error */; };
						};
					::SendMessage( hWndList, LB_SETCURSEL, iCurSel, 0 );
					::SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
					break;
					}

				default:
					return (FALSE);
				};
			};
			break;

		default:
			return (FALSE);
		};

	return (TRUE);
}

/*____________________________________________________________________________*\
 *
 Description:
	Definitions and global values
\*____________________________________________________________________________*/
DLGPROC fnIO = (DLGPROC)DialogProc;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -