示例#1
0
struct sockaddr_in find_peer(int sockfd)
{
    struct timeval tv;
    tv.tv_sec = 1;
    tv.tv_usec = 0;
    Setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));

    struct sockaddr_in servaddr;
    socklen_t servaddr_len = sizeof(servaddr);
    bzero(&servaddr, servaddr_len);
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(CHAT_PORT);

    /* Remove the last octet from the address */
    char *dot = strrchr(subnet_address, '.');
    dot[1] = 0;

    int i = start_idx;
    char try_address[strlen(subnet_address) + 4];
    int is_conn = 0;
    do {
        update_try_address(try_address, sizeof(try_address),
            subnet_address, i, &servaddr);
        printf("Trying %s\n", try_address);

        auth_request(sockfd, (SA *) &servaddr, servaddr_len);
        printf("Sent auth request\n");

        is_conn = auth_try_confirm(sockfd, (SA *) &servaddr, &servaddr_len);

        ++i;
    } while (!is_conn);

    printf("Bound!\n");

    return servaddr;
}
示例#2
0
bool	http_async_delegate::do_system_callback( DWORD status, void* info, DWORD length )
{
	switch( status )
	{
	case WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE:
	case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE:
		{
			if( info != NULL && length == sizeof( DWORD ) )
			{
				DWORD written = *(static_cast< DWORD* >( info ));
				buffer_->flush( written );
			}

			if( buffer_->empty() == false )
			{
				if( ::WinHttpWriteData( request_, buffer_->buffer(), buffer_->size(), 0 ) == FALSE )
				{
					throw http_utility::http_exception( API_WRITE_DATA, ::GetLastError() );
				}
			}
			else
			{
				if( ::WinHttpReceiveResponse( request_, NULL ) == FALSE )
				{
					DWORD response_error = ::GetLastError();
					if( response_error == ERROR_WINHTTP_RESEND_REQUEST )
					{
						if( send_request() == false )
						{
							throw http_utility::http_exception( API_SEND_REQUEST, ::GetLastError() );
						}

						return true;
					}
					else
					{
						throw http_utility::http_exception( API_RECEIVE_RESPONSE, response_error );
					}
				}
			}
		}
		break;

	case WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE:
		{
			http_response_header header( request_ );
			DWORD status_code = header.status_code();

			if( status_code == HTTP_STATUS_DENIED ||
				status_code == HTTP_STATUS_PROXY_AUTH_REQ )
			{
				if( auth_request( status_code ) == false )
				{
					throw http_utility::http_exception( API_HEADER_STATUS_CODE, status_code );
				}

				return true;
			}
			else
			{
				if( status_code >= HTTP_STATUS_BAD_REQUEST )
				{
					throw http_utility::http_exception( API_HEADER_STATUS_CODE, status_code );
				}
			}

			clear_request_data();

			http_content* content = content_;
			if( content == NULL || content->on_header( header ) == false )
			{
				return false;
			}

			buffer_->clear();
			if( ::WinHttpReadData( request_, buffer_->buffer(), buffer_->max_size(), NULL ) == FALSE )
			{
				throw http_utility::http_exception( API_READ_DATA, ::GetLastError() );
			}
		}
		break;

	case WINHTTP_CALLBACK_STATUS_READ_COMPLETE:
		{
			http_content* content = content_;
			if( content == NULL )
			{
				return false;
			}

			if( length > 0 )
			{
				buffer_->had_copied( length );
				if( content->on_body( buffer_->buffer(), buffer_->size() ) == false )
				{
					return false;
				}

				buffer_->clear();
				if( ::WinHttpReadData( request_, buffer_->buffer(), buffer_->max_size(), NULL ) == FALSE )
				{
					throw http_utility::http_exception( API_READ_DATA, ::GetLastError() );
				}
			}
			else
			{
				content->on_complete();
				return false;
			}
		}
		break;

	case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR:
		{
			WINHTTP_ASYNC_RESULT* result = static_cast< WINHTTP_ASYNC_RESULT* >( info );

			throw http_utility::http_exception( result->dwResult, result->dwError );
		}
		break;

	case WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING:
		{
			throw http_utility::http_exception( API_HANDLE_CLOSING, ::GetLastError() );
		}
		break;
	}

	return true;
}
示例#3
0
文件: main.cpp 项目: oldbay/dnc_kassa
int main( int argc, char ** argv )
{
    
    QApplication a( argc, argv );
    
    puts("`````````````````````````````````````````````````");
    printf("RESHKA MAIN PROCESS ID - %d\n", getpid());
    printf("VERSION: %s\n", PROGRAMM_VERSION);
    puts("`````````````````````````````````````````````````");
    
    startHW();
    
    get_setup_params();
    
    hw->DSP_Up(UpStr);
    hw->DSP_Down(DownStr);   
    
    init_keyboard_device(&a);     
    
    bool flag = auth_request(false);
    if ( flag )    {	
	cfw = new mainmenuForm;
	cfw->setWindowState(Qt::WindowNoState);
	cfw->setWindowState(Qt::WindowFullScreen);
	//printf("Authorization::GetInstance()->GetUserName() = %s \n", Authorization::GetInstance()->GetUserName());
	cfw->textLabel2->setText(DBCodec->toUnicode((Authorization::GetInstance()->GetUserName())));
	applyRights();
	
	while ( true )	{
	    puts("------Main Menu------");	    
	    cfw->setWindowState(Qt::WindowNoState);
      	    cfw->setWindowState(Qt::WindowFullScreen);
	    cfw->exec();
	    //printf("Selected point  = %d \n", cfw->focus_num);
	    cfw->releaseKeyboard();
	    if  ( cfw->exec_flag )   {
		switch(cfw->focus_num)		{
		case 0 :
		    printf("--------lincash-------\n");
		    delete (hw);
		    ExecProgram(REG_PATH, REG_NAME, uid);//, REG_NAME);	///-------------------------23/10 16.41---------------
		    cfw->grabKeyboard();
		    //---(+)---Zuskin---27/02/2012---
		    sp.ReloadSections();
		    //-------------------------------
		    startHW();
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr); 
		    break;
		case 1 :
		    printf("-------service-----\n");
		    //delete (hw);
		    //QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) );
		    //ExecProgram(SERVICE_PATH, SERVICE_NAME, uid);//, SERVICE_NAME);
		    StartService();
		    cfw->exec_flag = false;
   		    cfw->grabKeyboard();
		    //QApplication::restoreOverrideCursor(); 
		    //startHW();
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr);      
		    break;
		case 2 :
		    printf("-------accessrights-------\n");
		    delete (hw);
		    //printf("RIGHTS_PATH = %s \n", RIGHTS_PATH);
		    ExecProgram(RIGHTS_PATH);//, RIGHTS_NAME);
		    Authorization::GetInstance()->GetRights(Authorization::GetInstance()->GetUid());
		    applyRights();
   		    cfw->grabKeyboard();
		    startHW();
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr); 
		    break;
		case 3 :
		    printf("--------ware------\n");
		    delete (hw);
		    ExecProgram(WARE_PATH);//, SETUP_NAME);
		    cfw->grabKeyboard();	
		    startHW();
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr);
		    break;			    
		case 4 :
		    printf("-------programsetup-----\n");
		    StartSetup();
		    cfw->grabKeyboard();	
		    get_setup_params();
		    cfw->exec_flag = false;
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr);
		    break;
		case 5 :
		    printf("--------devicesetup-------\n");		    
		    if ( kbcode_scaner != NULL ) {   delete (kbcode_scaner);    kbcode_scaner = NULL;    }
		    if ( kbcode_reader != NULL ) {   delete (kbcode_reader);    kbcode_reader = NULL;    }
		    
		    delete (hw);
		    ExecProgram(DCONF_PATH);//, DCONF_NAME);
    		    cfw->grabKeyboard();
		    startHW();
		    init_keyboard_device(&a); 
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr); 
		    break;
		case 6 :
		    printf("--------setuploadunload------\n");
		    delete (hw);
		    ExecProgram(EXCH_PATH);//, EXCH_NAME);
    		    cfw->grabKeyboard();
		    startHW();
		    hw->DSP_Up(UpStr);
		    hw->DSP_Down(DownStr);	      
		    break;
		case 7 :
		    printf("-------changeuser------\n");
		    bool auth = auth_request(true);
		    while ( !auth ) auth = auth_request(true);
    		    cfw->grabKeyboard();
		    cfw->exec_flag = false;
		    cfw->textLabel2->setText(DBCodec->toUnicode((Authorization::GetInstance()->GetUserName())));
		    applyRights();
		    break;	    
		}
		cfw->exec_flag = false;
		
	    }
	    else break;   
	}
	delete(cfw);
    }       
    if ( kbcode_scaner != NULL ) delete (kbcode_scaner);
    if ( kbcode_reader != NULL ) delete (kbcode_reader);
    if ( hw != NULL )  delete (hw);
    puts("END OF RESHKA");
    
    return 0;
}