sim-card
/
qemu
Archived
10
0
Fork 0

slirp: Refactor tcp_ctl

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Jan Kiszka 2009-06-24 14:42:28 +02:00 committed by Anthony Liguori
parent 753a5f170d
commit b35725c544
1 changed files with 28 additions and 77 deletions

View File

@ -1228,84 +1228,35 @@ do_prompt:
* Return 0 if this connections is to be closed, 1 otherwise, * Return 0 if this connections is to be closed, 1 otherwise,
* return 2 if this is a command-line connection * return 2 if this is a command-line connection
*/ */
int int tcp_ctl(struct socket *so)
tcp_ctl(struct socket *so)
{ {
struct sbuf *sb = &so->so_snd; int command = (ntohl(so->so_faddr.s_addr) & 0xff);
int command; struct sbuf *sb = &so->so_snd;
struct ex_list *ex_ptr; struct ex_list *ex_ptr;
int do_pty; int do_pty;
// struct socket *tmpso;
DEBUG_CALL("tcp_ctl"); DEBUG_CALL("tcp_ctl");
DEBUG_ARG("so = %lx", (long )so); DEBUG_ARG("so = %lx", (long )so);
#if 0 if (command != CTL_ALIAS) {
/* /* Check if it's pty_exec */
* Check if they're authorised for (ex_ptr = exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
*/ if (ex_ptr->ex_fport == so->so_fport &&
if (ctl_addr.s_addr && (ctl_addr.s_addr == -1 || (so->so_laddr.s_addr != ctl_addr.s_addr))) { command == ex_ptr->ex_addr) {
sb->sb_cc = sprintf(sb->sb_wptr,"Error: Permission denied.\r\n"); if (ex_ptr->ex_pty == 3) {
sb->sb_wptr += sb->sb_cc; so->s = -1;
return 0; so->extra = (void *)ex_ptr->ex_exec;
} return 1;
#endif }
command = (ntohl(so->so_faddr.s_addr) & 0xff); do_pty = ex_ptr->ex_pty;
DEBUG_MISC((dfd, " executing %s \n",ex_ptr->ex_exec));
switch(command) { return fork_exec(so, ex_ptr->ex_exec, do_pty);
default: /* Check for exec's */ }
}
/* }
* Check if it's pty_exec sb->sb_cc =
*/ snprintf(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
for (ex_ptr = exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) { "Error: No application configured.\r\n");
if (ex_ptr->ex_fport == so->so_fport && sb->sb_wptr += sb->sb_cc;
command == ex_ptr->ex_addr) { return 0;
if (ex_ptr->ex_pty == 3) {
so->s = -1;
so->extra = (void *)ex_ptr->ex_exec;
return 1;
}
do_pty = ex_ptr->ex_pty;
goto do_exec;
}
}
/*
* Nothing bound..
*/
/* tcp_fconnect(so); */
/* FALLTHROUGH */
case CTL_ALIAS:
sb->sb_cc = snprintf(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
"Error: No application configured.\r\n");
sb->sb_wptr += sb->sb_cc;
return(0);
do_exec:
DEBUG_MISC((dfd, " executing %s \n",ex_ptr->ex_exec));
return(fork_exec(so, ex_ptr->ex_exec, do_pty));
#if 0
case CTL_CMD:
for (tmpso = tcb.so_next; tmpso != &tcb; tmpso = tmpso->so_next) {
if (tmpso->so_emu == EMU_CTL &&
!(tmpso->so_tcpcb?
(tmpso->so_tcpcb->t_state & (TCPS_TIME_WAIT|TCPS_LAST_ACK))
:0)) {
/* Ooops, control connection already active */
sb->sb_cc = sprintf(sb->sb_wptr,"Sorry, already connected.\r\n");
sb->sb_wptr += sb->sb_cc;
return 0;
}
}
so->so_emu = EMU_CTL;
ctl_password_ok = 0;
sb->sb_cc = sprintf(sb->sb_wptr, "Slirp command-line ready (type \"help\" for help).\r\nSlirp> ");
sb->sb_wptr += sb->sb_cc;
do_echo=-1;
return(2);
#endif
}
} }