1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/*
This file is distributed in public domain. You can do whatever you want
with its content.
*/
#include <libssh/libssh.h>
#include <stdio.h>
#include <string.h>
#include "tests.h"
#define ECHO_PORT 7
void do_connect(SSH_SESSION *session){
int error=ssh_connect(session);
if(error != SSH_OK){
fprintf(stderr,"Error at connection :%s\n",ssh_get_error(session));
return;
}
printf("Connected\n");
ssh_is_server_known(session);
// we don't care what happens here
error=authenticate(session);
if(error != SSH_AUTH_SUCCESS){
fprintf(stderr,"Error at authentication :%s\n",ssh_get_error(session));
return;
}
printf("Authenticated\n");
CHANNEL *channel=ssh_channel_new(session);
error=ssh_channel_open_forward(channel,"localhost",ECHO_PORT,"localhost",42);
if(error!=SSH_OK){
fprintf(stderr,"Error when opening forward:%s\n",ssh_get_error(session));
return;
}
printf("Forward opened\n");
int i=0;
char string[20];
char buffer[20];
for(i=0;i<2000;++i){
sprintf(string,"%d\n",i);
ssh_channel_write(channel,string,strlen(string));
do {
error=ssh_channel_poll(channel,0);
//if(error < strlen(string))
//usleep(10);
} while(error < strlen(string) && error >= 0);
if(error>0){
error=ssh_channel_read_nonblocking(channel,buffer,strlen(string),0);
if(error>=0){
if(memcmp(buffer,string,strlen(string))!=0){
fprintf(stderr,"Problem with answer: wanted %s got %s\n",string,buffer);
} else {
printf(".");
fflush(stdout);
}
}
}
if(error==-1){
fprintf(stderr,"Channel reading error : %s\n",ssh_get_error(session));
break;
}
}
printf("\nChannel test finished\n");
ssh_channel_close(channel);
ssh_channel_free(channel);
}
int main(int argc, char **argv){
SSH_OPTIONS *options=set_opts(argc, argv);
SSH_SESSION *session=ssh_new();
if(options==NULL){
return 1;
}
ssh_set_options(session,options);
do_connect(session);
ssh_disconnect(session);
ssh_finalize();
return 0;
}
|