From 553451348096e80bf11470cd882b31bea3178c80 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Wed, 10 Jul 2019 22:48:08 +0000 Subject: [PATCH] Normalize terminal types across protocols. Note that conn_pty does not support PETSCII or ATASCII as the terminal type since it sets TERMCAP, and I don't have a termcap entry for either of those. --- src/syncterm/CHANGES | 1 + src/syncterm/bbslist.c | 14 ++++++++++++++ src/syncterm/bbslist.h | 1 + src/syncterm/rlogin.c | 10 +++++++--- src/syncterm/ssh.c | 4 +++- src/syncterm/telnet_io.c | 16 ++-------------- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/syncterm/CHANGES b/src/syncterm/CHANGES index 6eeeeae5de..b3794256b1 100644 --- a/src/syncterm/CHANGES +++ b/src/syncterm/CHANGES @@ -22,6 +22,7 @@ Added support for cached font assets Support for XTerm and TundraDraw/PabloDraw 24-bit color modes Some PETSCII keyboard changes Add support for DECRQSS +Terminal type is now sent as "syncterm", "PETSCII", or "ATASCII" Version 1.0 ----------- diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c index 9635e40ef9..d37bac5137 100644 --- a/src/syncterm/bbslist.c +++ b/src/syncterm/bbslist.c @@ -1982,3 +1982,17 @@ get_emulation(struct bbslist *bbs) return CTERM_EMULATION_ANSI_BBS; } } + +const char * +get_emulation_str(cterm_emulation_t emu) +{ + switch (emu) { + case CTERM_EMULATION_ANSI_BBS: + return "syncterm"; + case CTERM_EMULATION_PETASCII: + return "PETSCII"; + case CTERM_EMULATION_ATASCII: + return "ATASCII"; + } +} + diff --git a/src/syncterm/bbslist.h b/src/syncterm/bbslist.h index 88b975b86d..fe8f2d82bc 100644 --- a/src/syncterm/bbslist.h +++ b/src/syncterm/bbslist.h @@ -106,5 +106,6 @@ void add_bbs(char *listpath, struct bbslist *bbs); int edit_list(struct bbslist **list, struct bbslist *item,char *listpath,int isdefault); int get_rate_num(int rate); cterm_emulation_t get_emulation(struct bbslist *bbs); +const char *get_emulation_str(cterm_emulation_t emu); #endif diff --git a/src/syncterm/rlogin.c b/src/syncterm/rlogin.c index e1cb2cc14f..f48d749a17 100644 --- a/src/syncterm/rlogin.c +++ b/src/syncterm/rlogin.c @@ -156,12 +156,16 @@ int rlogin_connect(struct bbslist *bbs) conn_send(ruser,strlen(ruser)+1,1000); if(bbs->bpsrate) { char sbuf[30]; - sprintf(sbuf, "ansi-bbs/%d", bbs->bpsrate); + sprintf(sbuf, "%s/%d", get_emulation_str(get_emulation(bbs)), bbs->bpsrate); + + conn_send(sbuf, strlen(sbuf)+1,1000); + } + else { + char sbuf[30]; + sprintf(sbuf, "%s/115200", get_emulation_str(get_emulation(bbs))); conn_send(sbuf, strlen(sbuf)+1,1000); } - else - conn_send("ansi-bbs/115200",16,1000); } _beginthread(rlogin_output_thread, 0, NULL); diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c index cfb63009ba..808ac22839 100644 --- a/src/syncterm/ssh.c +++ b/src/syncterm/ssh.c @@ -147,6 +147,7 @@ int ssh_connect(struct bbslist *bbs) char username[MAX_USER_LEN+1]; int rows,cols; struct text_info ti; + const char *term; init_uifc(TRUE, TRUE); pthread_mutex_init(&ssh_mutex, NULL); @@ -236,7 +237,8 @@ int ssh_connect(struct bbslist *bbs) uifc.pop(NULL); uifc.pop("Setting Terminal Type"); - status=cl.SetAttributeString(ssh_session, CRYPT_SESSINFO_SSH_TERMINAL, "syncterm", 8); + term = get_emulation_str(get_emulation(bbs)); + status=cl.SetAttributeString(ssh_session, CRYPT_SESSINFO_SSH_TERMINAL, term, strlen(term)); /* Horrible way to determine the screen size */ textmode(screen_to_ciolib(bbs->screen_mode)); diff --git a/src/syncterm/telnet_io.c b/src/syncterm/telnet_io.c index 0a080ec4b0..09dd20a3e1 100644 --- a/src/syncterm/telnet_io.c +++ b/src/syncterm/telnet_io.c @@ -158,24 +158,12 @@ BYTE* telnet_interpret(BYTE* inbuf, int inlen, BYTE* outbuf, int *outlen, cterm_ /* sub-option terminated */ if(option==TELNET_TERM_TYPE && telnet_cmd[3]==TELNET_TERM_SEND) { char buf[32]; - const char *termtype; - switch(emu) { - case CTERM_EMULATION_PETASCII: - termtype = "PETSCII"; - break; - case CTERM_EMULATION_ATASCII: - termtype = "ATASCII"; - break; - default: - termtype = "ANSI"; - break; - } int len=sprintf(buf,"%c%c%c%c%s%c%c" ,TELNET_IAC,TELNET_SB ,TELNET_TERM_TYPE,TELNET_TERM_IS - ,termtype + ,get_emulation_str(emu) ,TELNET_IAC,TELNET_SE); - lprintf(LOG_INFO,"TX: Terminal Type is %s", termtype); + lprintf(LOG_INFO,"TX: Terminal Type is %s", get_emulation_str(emu)); putcom(buf,len); request_telnet_opt(TELNET_WILL, TELNET_NEGOTIATE_WINDOW_SIZE); } -- GitLab