Blame tests/test_tunnel.c

Packit 6c0a39
/*
Packit 6c0a39
This file is distributed in public domain. You can do whatever you want
Packit 6c0a39
with its content.
Packit 6c0a39
*/
Packit 6c0a39
#include <libssh/libssh.h>
Packit 6c0a39
#include <stdio.h>
Packit 6c0a39
#include <string.h>
Packit 6c0a39
#include "tests.h"
Packit 6c0a39
#define ECHO_PORT 7
Packit 6c0a39
void do_connect(SSH_SESSION *session){
Packit 6c0a39
	int error=ssh_connect(session);
Packit 6c0a39
	if(error != SSH_OK){
Packit 6c0a39
		fprintf(stderr,"Error at connection :%s\n",ssh_get_error(session));
Packit 6c0a39
		return;
Packit 6c0a39
	}
Packit 6c0a39
	printf("Connected\n");
Packit 6c0a39
	ssh_session_is_known_server(session);
Packit 6c0a39
	// we don't care what happens here
Packit 6c0a39
	error=authenticate(session);
Packit 6c0a39
	if(error != SSH_AUTH_SUCCESS){
Packit 6c0a39
		fprintf(stderr,"Error at authentication :%s\n",ssh_get_error(session));
Packit 6c0a39
		return;
Packit 6c0a39
	}
Packit 6c0a39
	printf("Authenticated\n");
Packit 6c0a39
	CHANNEL *channel=ssh_channel_new(session);
Packit 6c0a39
	error=ssh_channel_open_forward(channel,"localhost",ECHO_PORT,"localhost",42);
Packit 6c0a39
	if(error!=SSH_OK){
Packit 6c0a39
		fprintf(stderr,"Error when opening forward:%s\n",ssh_get_error(session));
Packit 6c0a39
		return;
Packit 6c0a39
	}
Packit 6c0a39
	printf("Forward opened\n");
Packit 6c0a39
	int i=0;
Packit 6c0a39
	char string[20];
Packit 6c0a39
	char buffer[20];
Packit 6c0a39
	for(i=0;i<2000;++i){
Packit 6c0a39
		sprintf(string,"%d\n",i);
Packit 6c0a39
		ssh_channel_write(channel,string,strlen(string));
Packit 6c0a39
		do {
Packit 6c0a39
			error=ssh_channel_poll(channel,0);
Packit 6c0a39
			//if(error < strlen(string))
Packit 6c0a39
				//usleep(10);
Packit 6c0a39
		} while(error < strlen(string) && error >= 0);
Packit 6c0a39
		if(error>0){
Packit 6c0a39
			error=ssh_channel_read_nonblocking(channel,buffer,strlen(string),0);
Packit 6c0a39
			if(error>=0){
Packit 6c0a39
				if(memcmp(buffer,string,strlen(string))!=0){
Packit 6c0a39
					fprintf(stderr,"Problem with answer: wanted %s got %s\n",string,buffer);
Packit 6c0a39
				} else {
Packit 6c0a39
					printf(".");
Packit 6c0a39
					fflush(stdout);
Packit 6c0a39
				}
Packit 6c0a39
			}
Packit 6c0a39
				
Packit 6c0a39
		}
Packit 6c0a39
		if(error==-1){
Packit 6c0a39
			fprintf(stderr,"Channel reading error : %s\n",ssh_get_error(session));
Packit 6c0a39
			break;
Packit 6c0a39
		}
Packit 6c0a39
	}
Packit 6c0a39
	printf("\nChannel test finished\n");
Packit 6c0a39
	ssh_channel_close(channel);
Packit 6c0a39
	ssh_channel_free(channel);
Packit 6c0a39
}
Packit 6c0a39
Packit 6c0a39
int main(int argc, char **argv){
Packit 6c0a39
	SSH_OPTIONS *options=set_opts(argc, argv);
Packit 6c0a39
	SSH_SESSION *session=ssh_new();
Packit 6c0a39
	if(options==NULL){
Packit 6c0a39
		return 1;
Packit 6c0a39
	}
Packit 6c0a39
	ssh_set_options(session,options);
Packit 6c0a39
	do_connect(session);
Packit 6c0a39
	ssh_disconnect(session);
Packit 6c0a39
	ssh_finalize();
Packit 6c0a39
	return 0;
Packit 6c0a39
}