mirror of
https://github.com/0intro/conterm
synced 2024-11-25 23:19:36 +03:00
57 lines
874 B
C
57 lines
874 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <authsrv.h>
|
|
|
|
static char *pbmsg = "AS protocol botch";
|
|
|
|
int
|
|
_asrdresp(int fd, char *buf, int len)
|
|
{
|
|
int n;
|
|
char error[64];
|
|
|
|
if(read(fd, buf, 1) != 1){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
|
|
n = len;
|
|
switch(buf[0]){
|
|
case AuthOK:
|
|
if(readn(fd, buf, len) != len){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
break;
|
|
case AuthErr:
|
|
if(readn(fd, error, sizeof error) != sizeof error){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
error[sizeof error-1] = '\0';
|
|
werrstr("remote: %s", error);
|
|
return -1;
|
|
case AuthOKvar:
|
|
if(readn(fd, error, 5) != 5){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
error[5] = 0;
|
|
n = atoi(error);
|
|
if(n <= 0 || n > len){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
memset(buf, 0, len);
|
|
if(readn(fd, buf, n) != n){
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
break;
|
|
default:
|
|
werrstr(pbmsg);
|
|
return -1;
|
|
}
|
|
return n;
|
|
}
|