Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Synchronet
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Main
Synchronet
Commits
8e3c4bf7
Commit
8e3c4bf7
authored
20 years ago
by
rswindell
Browse files
Options
Downloads
Patches
Plain Diff
Fixed Zmodem uploads using CRC-32, ZFIN send/get and other stuff.
parent
bc4a9e3c
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/sbbs3/sexyz.c
+15
-3
15 additions, 3 deletions
src/sbbs3/sexyz.c
src/sbbs3/zmodem.c
+58
-35
58 additions, 35 deletions
src/sbbs3/zmodem.c
src/sbbs3/zmodem.h
+2
-1
2 additions, 1 deletion
src/sbbs3/zmodem.h
with
75 additions
and
39 deletions
src/sbbs3/sexyz.c
+
15
−
3
View file @
8e3c4bf7
...
@@ -193,6 +193,14 @@ static char *chr(uchar ch)
...
@@ -193,6 +193,14 @@ static char *chr(uchar ch)
case
ZRINIT
:
return
(
"ZRINIT"
);
case
ZRINIT
:
return
(
"ZRINIT"
);
case
ZSINIT
:
return
(
"ZSINIT"
);
case
ZSINIT
:
return
(
"ZSINIT"
);
case
ZACK
:
return
(
"ZACK"
);
case
ZACK
:
return
(
"ZACK"
);
case
ZFILE
:
return
(
"ZFILE"
);
case
ZSKIP
:
return
(
"ZSKIP"
);
case
ZNAK
:
return
(
"ZNAK"
);
case
ZABORT
:
return
(
"ZABORT"
);
case
ZFIN
:
return
(
"ZFIN"
);
case
ZRPOS
:
return
(
"ZRPOS"
);
case
ZDATA
:
return
(
"ZDATA"
);
case
ZEOF
:
return
(
"ZEOF"
);
case
ZPAD
:
return
(
"ZPAD"
);
case
ZPAD
:
return
(
"ZPAD"
);
case
ZDLE
:
return
(
"ZDLE"
);
case
ZDLE
:
return
(
"ZDLE"
);
case
ZDLEE
:
return
(
"ZDLEE"
);
case
ZDLEE
:
return
(
"ZDLEE"
);
...
@@ -205,6 +213,10 @@ static char *chr(uchar ch)
...
@@ -205,6 +213,10 @@ static char *chr(uchar ch)
case
ZVBIN32
:
return
(
"ZVBIN32"
);
case
ZVBIN32
:
return
(
"ZVBIN32"
);
case
ZVBINR32
:
return
(
"ZVBINR32"
);
case
ZVBINR32
:
return
(
"ZVBINR32"
);
case
ZRESC
:
return
(
"ZRESC"
);
case
ZRESC
:
return
(
"ZRESC"
);
case
ZCRCE
:
return
(
"ZCRCE"
);
case
ZCRCG
:
return
(
"ZCRCG"
);
case
ZCRCQ
:
return
(
"ZCRCQ"
);
case
ZCRCW
:
return
(
"ZCRCW"
);
}
}
}
else
{
}
else
{
switch
(
ch
)
{
switch
(
ch
)
{
...
@@ -795,7 +807,7 @@ static int send_files(char** fname, uint fnames)
...
@@ -795,7 +807,7 @@ static int send_files(char** fname, uint fnames)
if
(
mode
&
XMODEM
)
if
(
mode
&
XMODEM
)
return
(
0
);
return
(
0
);
if
(
mode
&
ZMODEM
)
if
(
mode
&
ZMODEM
)
zmodem_
send
_zfin
(
&
zm
);
zmodem_
get
_zfin
(
&
zm
);
else
{
/* YMODEM */
else
{
/* YMODEM */
if
(
xmodem_get_mode
(
&
xm
))
{
if
(
xmodem_get_mode
(
&
xm
))
{
...
@@ -917,7 +929,7 @@ static int receive_files(char** fname_list, int fnames)
...
@@ -917,7 +929,7 @@ static int receive_files(char** fname_list, int fnames)
zmodem_send_nak
(
&
zm
);
zmodem_send_nak
(
&
zm
);
break
;
break
;
case
ZFIN
:
case
ZFIN
:
zmodem_send_zfin
(
&
zm
);
zmodem_send_zfin
(
&
zm
);
/* ACK */
/* fall-through */
/* fall-through */
case
ZCOMPL
:
case
ZCOMPL
:
return
(
0
);
return
(
0
);
...
@@ -1006,7 +1018,7 @@ static int receive_files(char** fname_list, int fnames)
...
@@ -1006,7 +1018,7 @@ static int receive_files(char** fname_list, int fnames)
,
str
,
str
,
file_bytes
/
1024
,
file_bytes
/
1024
,
mode
&
YMODEM
?
mode
&
GMODE
?
"Ymodem-G"
:
"Ymodem"
:
"Zmodem"
,
mode
&
YMODEM
?
mode
&
GMODE
?
"Ymodem-G"
:
"Ymodem"
:
"Zmodem"
,
mode
&
CRC
?
"CRC-16"
:
"Checksum"
);
,
mode
&
ZMODEM
?
""
:
(
mode
&
CRC
?
"CRC-16"
:
"Checksum"
)
)
;
startfile
=
time
(
NULL
);
startfile
=
time
(
NULL
);
success
=
FALSE
;
success
=
FALSE
;
...
...
This diff is collapsed.
Click to expand it.
src/sbbs3/zmodem.c
+
58
−
35
View file @
8e3c4bf7
...
@@ -261,7 +261,7 @@ zmodem_tx_hex_header(zmodem_t* zm, unsigned char * p)
...
@@ -261,7 +261,7 @@ zmodem_tx_hex_header(zmodem_t* zm, unsigned char * p)
*/
*/
zmodem_tx_raw
(
zm
,
'\r'
);
zmodem_tx_raw
(
zm
,
'\r'
);
zmodem_tx_raw
(
zm
,
'\n'
);
zmodem_tx_raw
(
zm
,
'\n'
|
0x80
);
/* FDSZ sends 0x8a instead of 0x0a */
if
(
type
!=
ZACK
&&
type
!=
ZFIN
)
if
(
type
!=
ZACK
&&
type
!=
ZFIN
)
zmodem_tx_raw
(
zm
,
XON
);
zmodem_tx_raw
(
zm
,
XON
);
...
@@ -431,6 +431,13 @@ zmodem_tx_16_data(zmodem_t* zm, uchar sub_frame_type,unsigned char * p,int l)
...
@@ -431,6 +431,13 @@ zmodem_tx_16_data(zmodem_t* zm, uchar sub_frame_type,unsigned char * p,int l)
void
void
zmodem_tx_data
(
zmodem_t
*
zm
,
uchar
sub_frame_type
,
unsigned
char
*
p
,
int
l
)
zmodem_tx_data
(
zmodem_t
*
zm
,
uchar
sub_frame_type
,
unsigned
char
*
p
,
int
l
)
{
{
#if 0
int i;
for(i=0;i<l;i++)
fprintf(stderr,"%02X ",p[i]);
fprintf(stderr,"\n");
#endif
if
(
!
zm
->
want_fcs_16
&&
zm
->
can_fcs_32
)
{
if
(
!
zm
->
want_fcs_16
&&
zm
->
can_fcs_32
)
{
zmodem_tx_32_data
(
zm
,
sub_frame_type
,
p
,
l
);
zmodem_tx_32_data
(
zm
,
sub_frame_type
,
p
,
l
);
}
}
...
@@ -602,7 +609,7 @@ zmodem_rx(zmodem_t* zm, int to)
...
@@ -602,7 +609,7 @@ zmodem_rx(zmodem_t* zm, int to)
case
ZCRCG
:
case
ZCRCG
:
case
ZCRCQ
:
case
ZCRCQ
:
case
ZCRCW
:
case
ZCRCW
:
lprintf
(
zm
,
LOG_DEBUG
,
"escaping data subpacket type: %s"
,
chr
((
uchar
)
c
));
//
lprintf(zm,LOG_DEBUG,"escaping data subpacket type: %s", chr((uchar)c));
return
(
c
|
ZDLEESC
);
return
(
c
|
ZDLEESC
);
case
ZRUB0
:
case
ZRUB0
:
return
0x7f
;
return
0x7f
;
...
@@ -664,7 +671,7 @@ zmodem_rx_32_data(zmodem_t* zm, unsigned char * p, unsigned maxlen, unsigned* l)
...
@@ -664,7 +671,7 @@ zmodem_rx_32_data(zmodem_t* zm, unsigned char * p, unsigned maxlen, unsigned* l)
crc
=
0xffffffffl
;
crc
=
0xffffffffl
;
do
{
do
{
c
=
zmodem_rx
(
zm
,
1
);
c
=
zmodem_rx
(
zm
,
zm
->
recv_timeout
);
if
(
c
==
TIMEOUT
)
{
if
(
c
==
TIMEOUT
)
{
return
TIMEOUT
;
return
TIMEOUT
;
...
@@ -683,13 +690,14 @@ zmodem_rx_32_data(zmodem_t* zm, unsigned char * p, unsigned maxlen, unsigned* l)
...
@@ -683,13 +690,14 @@ zmodem_rx_32_data(zmodem_t* zm, unsigned char * p, unsigned maxlen, unsigned* l)
crc
=
~
crc
;
crc
=
~
crc
;
rxd_crc
=
zmodem_rx
(
zm
,
1
);
rxd_crc
=
zmodem_rx
(
zm
,
zm
->
recv_timeout
);
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
8
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
8
;
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
16
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
16
;
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
24
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
24
;
if
(
rxd_crc
!=
crc
)
{
if
(
rxd_crc
!=
crc
)
{
lprintf
(
zm
,
LOG_WARNING
,
"CRC-32 ERROR"
);
lprintf
(
zm
,
LOG_WARNING
,
"CRC-32 ERROR (%08lX vs %08lX) Bytes=%u"
,
rxd_crc
,
crc
,
*
l
);
return
FALSE
;
return
FALSE
;
}
}
...
@@ -782,31 +790,28 @@ zmodem_rx_data(zmodem_t* zm, unsigned char* p, size_t maxlen, unsigned* l)
...
@@ -782,31 +790,28 @@ zmodem_rx_data(zmodem_t* zm, unsigned char* p, size_t maxlen, unsigned* l)
* frame continues non-stop
* frame continues non-stop
*/
*/
case
ZCRCG
:
case
ZCRCG
:
lprintf
(
zm
,
LOG_DEBUG
,
"ZCRCG"
);
return
FRAMEOK
;
return
FRAMEOK
;
/*
/*
* frame ends
* frame ends
*/
*/
case
ZCRCE
:
case
ZCRCE
:
lprintf
(
zm
,
LOG_DEBUG
,
"ZCRCE"
);
return
ENDOFFRAME
;
return
ENDOFFRAME
;
/*
/*
* frame continues; ZACK expected
* frame continues; ZACK expected
*/
*/
case
ZCRCQ
:
case
ZCRCQ
:
lprintf
(
zm
,
LOG_DEBUG
,
"ZCRCQ"
);
zmodem_send_pos_header
(
zm
,
ZACK
,
pos
,
/* Hex? */
TRUE
);
zmodem_send_pos_header
(
zm
,
ZACK
,
pos
,
/* Hex? */
TRUE
);
return
FRAMEOK
;
return
FRAMEOK
;
/*
/*
* frame ends; ZACK expected
* frame ends; ZACK expected
*/
*/
case
ZCRCW
:
case
ZCRCW
:
lprintf
(
zm
,
LOG_DEBUG
,
"ZCRCW"
);
zmodem_send_pos_header
(
zm
,
ZACK
,
pos
,
/* Hex? */
TRUE
);
zmodem_send_pos_header
(
zm
,
ZACK
,
pos
,
/* Hex? */
TRUE
);
return
ENDOFFRAME
;
return
ENDOFFRAME
;
}
}
lprintf
(
zm
,
LOG_WARNING
,
"Invalid sub-frame type: %s"
,
chr
((
uchar
)
sub_frame_type
));
if
(
sub_frame_type
!=
FALSE
)
lprintf
(
zm
,
LOG_WARNING
,
"Invalid sub-frame type: %s"
,
chr
((
uchar
)
sub_frame_type
));
return
FALSE
;
return
FALSE
;
}
}
...
@@ -894,7 +899,7 @@ zmodem_rx_bin16_header(zmodem_t* zm, int to)
...
@@ -894,7 +899,7 @@ zmodem_rx_bin16_header(zmodem_t* zm, int to)
crc
=
0
;
crc
=
0
;
for
(
n
=
0
;
n
<
5
;
n
++
)
{
for
(
n
=
0
;
n
<
HDRLEN
;
n
++
)
{
c
=
zmodem_rx
(
zm
,
to
);
c
=
zmodem_rx
(
zm
,
to
);
if
(
c
==
TIMEOUT
)
{
if
(
c
==
TIMEOUT
)
{
lprintf
(
zm
,
LOG_ERR
,
"timeout"
);
lprintf
(
zm
,
LOG_ERR
,
"timeout"
);
...
@@ -907,8 +912,8 @@ zmodem_rx_bin16_header(zmodem_t* zm, int to)
...
@@ -907,8 +912,8 @@ zmodem_rx_bin16_header(zmodem_t* zm, int to)
// crc = ucrc16(0,crc);
// crc = ucrc16(0,crc);
// crc = ucrc16(0,crc);
// crc = ucrc16(0,crc);
rxd_crc
=
zmodem_rx
(
zm
,
1
)
<<
8
;
rxd_crc
=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
8
;
rxd_crc
|=
zmodem_rx
(
zm
,
1
);
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
);
if
(
rxd_crc
!=
crc
)
{
if
(
rxd_crc
!=
crc
)
{
lprintf
(
zm
,
LOG_ERR
,
"bad crc %4.4x %4.4x"
,
rxd_crc
,
crc
);
lprintf
(
zm
,
LOG_ERR
,
"bad crc %4.4x %4.4x"
,
rxd_crc
,
crc
);
...
@@ -929,7 +934,7 @@ zmodem_rx_hex_header(zmodem_t* zm, int to)
...
@@ -929,7 +934,7 @@ zmodem_rx_hex_header(zmodem_t* zm, int to)
#if 0 /* def _DEBUG */
#if 0 /* def _DEBUG */
lprintf(zm,LOG_INFO,"rx_hex_header : ");
lprintf(zm,LOG_INFO,"rx_hex_header : ");
#endif
#endif
for
(
i
=
0
;
i
<
5
;
i
++
)
{
for
(
i
=
0
;
i
<
HDRLEN
;
i
++
)
{
c
=
zmodem_rx_hex
(
zm
,
to
);
c
=
zmodem_rx_hex
(
zm
,
to
);
if
(
c
==
TIMEOUT
)
{
if
(
c
==
TIMEOUT
)
{
return
;
return
;
...
@@ -995,8 +1000,8 @@ zmodem_rx_bin32_header(zmodem_t* zm, int to)
...
@@ -995,8 +1000,8 @@ zmodem_rx_bin32_header(zmodem_t* zm, int to)
crc
=
0xffffffffL
;
crc
=
0xffffffffL
;
for
(
n
=
0
;
n
<
to
;
n
++
)
{
for
(
n
=
0
;
n
<
HDRLEN
;
n
++
)
{
c
=
zmodem_rx
(
zm
,
1
);
c
=
zmodem_rx
(
zm
,
zm
->
recv_timeout
);
if
(
c
==
TIMEOUT
)
{
if
(
c
==
TIMEOUT
)
{
return
;
return
;
}
}
...
@@ -1006,10 +1011,10 @@ zmodem_rx_bin32_header(zmodem_t* zm, int to)
...
@@ -1006,10 +1011,10 @@ zmodem_rx_bin32_header(zmodem_t* zm, int to)
crc
=
~
crc
;
crc
=
~
crc
;
rxd_crc
=
zmodem_rx
(
zm
,
1
);
rxd_crc
=
zmodem_rx
(
zm
,
zm
->
recv_timeout
);
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
8
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
8
;
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
16
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
16
;
rxd_crc
|=
zmodem_rx
(
zm
,
1
)
<<
24
;
rxd_crc
|=
zmodem_rx
(
zm
,
zm
->
recv_timeout
)
<<
24
;
if
(
rxd_crc
!=
crc
)
{
if
(
rxd_crc
!=
crc
)
{
return
;
return
;
...
@@ -1118,8 +1123,8 @@ zmodem_rx_header_raw(zmodem_t* zm, int to, int errors)
...
@@ -1118,8 +1123,8 @@ zmodem_rx_header_raw(zmodem_t* zm, int to, int errors)
zm
->
ack_file_pos
=
0l
;
zm
->
ack_file_pos
=
0l
;
}
}
#if 0 /
*
def _DEBUG
*/
#if 0 /
/
def _DEBUG
lprintf(zm,LOG_
INFO,"
type %
d
",zm->rxd_header[0]);
lprintf(zm,LOG_
DEBUG,"zmodem_rx_header_raw received header
type
:
%
s
",
chr(
zm->rxd_header[0])
)
;
#endif
#endif
return
zm
->
rxd_header
[
0
];
return
zm
->
rxd_header
[
0
];
...
@@ -1129,9 +1134,12 @@ int
...
@@ -1129,9 +1134,12 @@ int
zmodem_rx_header
(
zmodem_t
*
zm
,
int
timeout
)
zmodem_rx_header
(
zmodem_t
*
zm
,
int
timeout
)
{
{
int
ret
=
zmodem_rx_header_raw
(
zm
,
timeout
,
FALSE
);
int
ret
=
zmodem_rx_header_raw
(
zm
,
timeout
,
FALSE
);
if
(
ret
!=
TIMEOUT
)
#if 0
lprintf
(
zm
,
LOG_INFO
,
"zmodem_rx_header returning %s"
,
chr
((
uchar
)
ret
));
if(ret == TIMEOUT)
lprintf(zm,LOG_WARNING,"zmodem_rx_header timeout");
else
lprintf(zm,LOG_INFO,"zmodem_rx_header returning: %s", chr((uchar)ret));
#endif
if
(
ret
==
ZCAN
)
if
(
ret
==
ZCAN
)
zm
->
cancelled
=
TRUE
;
zm
->
cancelled
=
TRUE
;
...
@@ -1185,7 +1193,9 @@ int zmodem_get_zrinit(zmodem_t* zm)
...
@@ -1185,7 +1193,9 @@ int zmodem_get_zrinit(zmodem_t* zm)
void
zmodem_send_zrinit
(
zmodem_t
*
zm
)
void
zmodem_send_zrinit
(
zmodem_t
*
zm
)
{
{
unsigned
char
zrinit_header
[]
=
{
ZRINIT
,
0
,
0
,
0
,
ZF0_CANFDX
|
ZF0_CANOVIO
|
ZF0_CANFC32
};
unsigned
char
zrinit_header
[]
=
{
ZRINIT
,
0
,
0
,
0
,
0
};
zrinit_header
[
ZF0
]
=
ZF0_CANBRK
|
ZF0_CANFDX
|
ZF0_CANOVIO
|
ZF0_CANFC32
;
#if 0
#if 0
zrinit_header[ZP0] = sizeof(zm->rx_data_subpacket) >> 8;
zrinit_header[ZP0] = sizeof(zm->rx_data_subpacket) >> 8;
...
@@ -1200,12 +1210,18 @@ void zmodem_send_nak(zmodem_t* zm)
...
@@ -1200,12 +1210,18 @@ void zmodem_send_nak(zmodem_t* zm)
zmodem_send_pos_header
(
zm
,
ZNAK
,
0
,
/* Hex? */
TRUE
);
zmodem_send_pos_header
(
zm
,
ZNAK
,
0
,
/* Hex? */
TRUE
);
}
}
int
zmodem_send_zfin
(
zmodem_t
*
zm
)
void
zmodem_send_zfin
(
zmodem_t
*
zm
)
{
{
int
type
;
unsigned
char
zfin_header
[]
=
{
ZFIN
,
0
,
0
,
0
,
0
};
unsigned
char
zfin_header
[]
=
{
ZFIN
,
0
,
0
,
0
,
0
};
zmodem_tx_hex_header
(
zm
,
zfin_header
);
zmodem_tx_hex_header
(
zm
,
zfin_header
);
}
int
zmodem_get_zfin
(
zmodem_t
*
zm
)
{
int
type
;
zmodem_send_zfin
(
zm
);
do
{
do
{
type
=
zmodem_rx_header
(
zm
,
zm
->
recv_timeout
);
type
=
zmodem_rx_header
(
zm
,
zm
->
recv_timeout
);
}
while
(
type
!=
ZFIN
&&
type
!=
TIMEOUT
);
}
while
(
type
!=
ZFIN
&&
type
!=
TIMEOUT
);
...
@@ -1302,10 +1318,10 @@ zmodem_send_from(zmodem_t* zm, FILE* fp, ulong pos, ulong fsize, ulong* sent)
...
@@ -1302,10 +1318,10 @@ zmodem_send_from(zmodem_t* zm, FILE* fp, ulong pos, ulong fsize, ulong* sent)
while
(
zmodem_rx_poll
(
zm
))
{
while
(
zmodem_rx_poll
(
zm
))
{
int
type
;
int
type
;
int
c
;
int
c
;
if
((
c
=
zmodem_rx_raw
(
zm
,
1
))
<
0
)
if
((
c
=
zmodem_rx_raw
(
zm
,
zm
->
send_timeout
))
<
0
)
return
(
c
);
return
(
c
);
if
(
c
==
ZPAD
)
{
if
(
c
==
ZPAD
)
{
type
=
zmodem_rx_header
(
zm
,
1
);
type
=
zmodem_rx_header
(
zm
,
zm
->
send_timeout
);
if
(
type
!=
TIMEOUT
&&
type
!=
ACK
)
{
if
(
type
!=
TIMEOUT
&&
type
!=
ACK
)
{
return
type
;
return
type
;
}
}
...
@@ -1447,6 +1463,9 @@ BOOL zmodem_send_file(zmodem_t* zm, char* fname, FILE* fp, BOOL request_init, ti
...
@@ -1447,6 +1463,9 @@ BOOL zmodem_send_file(zmodem_t* zm, char* fname, FILE* fp, BOOL request_init, ti
* send the header and the data
* send the header and the data
*/
*/
lprintf
(
zm
,
LOG_INFO
,
"Sending ZFILE header block: '%s'"
,
zm
->
tx_data_subpacket
+
strlen
(
zm
->
tx_data_subpacket
)
+
1
);
zmodem_tx_header
(
zm
,
zfile_frame
);
zmodem_tx_header
(
zm
,
zfile_frame
);
zmodem_tx_data
(
zm
,
ZCRCW
,
zm
->
tx_data_subpacket
,
p
-
zm
->
tx_data_subpacket
);
zmodem_tx_data
(
zm
,
ZCRCW
,
zm
->
tx_data_subpacket
,
p
-
zm
->
tx_data_subpacket
);
...
@@ -1660,8 +1679,11 @@ int zmodem_recv_init(zmodem_t* zm)
...
@@ -1660,8 +1679,11 @@ int zmodem_recv_init(zmodem_t* zm)
type
=
zmodem_rx_header
(
zm
,
zm
->
recv_timeout
);
type
=
zmodem_rx_header
(
zm
,
zm
->
recv_timeout
);
if
(
type
!=
TIMEOUT
&&
type
!=
ZRQINIT
)
if
(
type
!=
TIMEOUT
&&
type
!=
ZRQINIT
)
break
;
break
;
if
(
type
!=
TIMEOUT
)
if
(
type
!=
TIMEOUT
)
{
lprintf
(
zm
,
LOG_WARNING
,
"Received header type: %s, expected ZFILE"
,
chr
((
uchar
)
type
));
lprintf
(
zm
,
LOG_WARNING
,
"Received header type: %s, expected ZFILE"
,
chr
((
uchar
)
type
));
lprintf
(
zm
,
LOG_DEBUG
,
"ZF0=%02X ZF1=%02X ZF2=%02X ZF3=%02X"
,
zm
->
rxd_header
[
ZF0
],
zm
->
rxd_header
[
ZF1
],
zm
->
rxd_header
[
ZF2
],
zm
->
rxd_header
[
ZF3
]);
}
}
}
return
(
type
);
return
(
type
);
...
@@ -1686,6 +1708,7 @@ BOOL zmodem_recv_file_info(zmodem_t* zm
...
@@ -1686,6 +1708,7 @@ BOOL zmodem_recv_file_info(zmodem_t* zm
long
serial
=-
1
;
long
serial
=-
1
;
unsigned
l
;
unsigned
l
;
memset
(
block
,
0
,
sizeof
(
block
));
i
=
zmodem_rx_data
(
zm
,
block
,
sizeof
(
block
),
&
l
);
i
=
zmodem_rx_data
(
zm
,
block
,
sizeof
(
block
),
&
l
);
if
(
i
!=
FRAMEOK
&&
i
!=
ENDOFFRAME
)
if
(
i
!=
FRAMEOK
&&
i
!=
ENDOFFRAME
)
...
@@ -1731,7 +1754,7 @@ unsigned zmodem_recv_file_data(zmodem_t* zm, FILE* fp, ulong offset, ulong fsize
...
@@ -1731,7 +1754,7 @@ unsigned zmodem_recv_file_data(zmodem_t* zm, FILE* fp, ulong offset, ulong fsize
if
((
i
=
zmodem_recv_file_frame
(
zm
,
fp
,
offset
,
fsize
,
start
))
==
ZEOF
)
if
((
i
=
zmodem_recv_file_frame
(
zm
,
fp
,
offset
,
fsize
,
start
))
==
ZEOF
)
break
;
break
;
if
(
i
!=
ENDOFFRAME
)
{
if
(
i
!=
ENDOFFRAME
)
{
if
(
i
>
=
0
)
if
(
i
>
0
)
lprintf
(
zm
,
LOG_WARNING
,
"Error at byte %lu: %s"
,
ftell
(
fp
),
chr
((
uchar
)
i
));
lprintf
(
zm
,
LOG_WARNING
,
"Error at byte %lu: %s"
,
ftell
(
fp
),
chr
((
uchar
)
i
));
errors
++
;
errors
++
;
}
}
...
...
This diff is collapsed.
Click to expand it.
src/sbbs3/zmodem.h
+
2
−
1
View file @
8e3c4bf7
...
@@ -276,8 +276,9 @@ void zmodem_send_zskip(zmodem_t* zm);
...
@@ -276,8 +276,9 @@ void zmodem_send_zskip(zmodem_t* zm);
void
zmodem_send_zrinit
(
zmodem_t
*
);
void
zmodem_send_zrinit
(
zmodem_t
*
);
void
zmodem_send_pos_header
(
zmodem_t
*
zm
,
int
type
,
long
pos
,
BOOL
hex
);
void
zmodem_send_pos_header
(
zmodem_t
*
zm
,
int
type
,
long
pos
,
BOOL
hex
);
int
zmodem_get_zrinit
(
zmodem_t
*
);
int
zmodem_get_zrinit
(
zmodem_t
*
);
int
zmodem_get_zfin
(
zmodem_t
*
zm
);
void
zmodem_parse_zrinit
(
zmodem_t
*
);
void
zmodem_parse_zrinit
(
zmodem_t
*
);
int
zmodem_send_zfin
(
zmodem_t
*
);
void
zmodem_send_zfin
(
zmodem_t
*
);
BOOL
zmodem_send_file
(
zmodem_t
*
,
char
*
name
,
FILE
*
fp
,
BOOL
request_init
,
time_t
*
start
,
ulong
*
bytes_sent
);
BOOL
zmodem_send_file
(
zmodem_t
*
,
char
*
name
,
FILE
*
fp
,
BOOL
request_init
,
time_t
*
start
,
ulong
*
bytes_sent
);
int
zmodem_recv_init
(
zmodem_t
*
zm
);
int
zmodem_recv_init
(
zmodem_t
*
zm
);
BOOL
zmodem_recv_file_info
(
zmodem_t
*
zm
BOOL
zmodem_recv_file_info
(
zmodem_t
*
zm
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment