0,0 → 1,188 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; CHAT.INC ;; |
;; ;; |
;; Modem Chat Initiator for PPP Dialer ;; |
;; ;; |
;; Version 3 2nd May 2003 ;; |
;; ;; |
;; Copyright 2002 Shrirang Bhagwat, b_shrirang@hotmail.com ;; |
;; ;; |
;; See file COPYING for details ;; |
;; ;; |
;; 2/5/03 - Shrirang - Added Abort Strings For sendwait ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; Request And Response Chat Strings |
; Following Data Structure is used for Request Response Chatting |
; with the modem, for each request there is an expected response |
; chatreq <-> chatres, 0 (NULL) is delimeter for 1 string |
; '`' is delimiter for the section, modify according to your |
; modem dialing scheme; in future MenuetOS might provide a graphical |
; client to generate this kind of data structure and the PAP packet |
; for username and password! |
; Aborts strings are used to get outta sendwait early... |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
; REQUESTS |
chatreq db 'ATH',13,0 ; 0 (NULL) is required by sendwait |
db 'ATZ',13,0 |
db 'ATM1',13,0 |
db 'ATX1',13,0 ; My Modem doesn't connect without this |
; db 'ATDT;',13,0 |
db 'ATDT phonenumber',13,0 |
db '`' ; <- End Marker |
|
; RESPONSES |
chatres db 'OK',0 |
db 'OK',0 |
db 'OK',0 |
db 'OK',0 |
; db 'OK',0 |
db 'CONNECT',0 |
db '`' ; <- End Marker |
|
; ABORTS |
aborts db 'ERROR',0 |
db 'NO CARRIER',0 |
db 'NO DIALTONE',0 |
db 'BUSY',0 |
db 'LINE IN USE',0 |
db 'NO ANSWER',0 |
db '`' ; <- End Marker |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; |
; modem_chat - chats with the modem to initiate a connection |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
modem_chat: |
|
push edi |
push esi |
push edx |
|
mov edi, chatreq ; init everytime, safe, stateless |
mov esi, chatres |
|
chat_now: |
|
cmp byte [esi], '`' ; are we done? |
je chatover |
|
mov edx, 6000 ; strings like "atdt;" take long on my modem |
call sendwait |
|
and eax, eax |
jz timeoutoccured |
|
updatereq: |
|
inc edi |
cmp byte [edi], '`' |
je updateres |
|
cmp byte [edi], 0 |
jne updatereq |
|
inc edi |
|
updateres: |
|
inc esi |
cmp byte [esi], '`' |
je chatover |
|
cmp byte [esi], 0 |
jne updateres |
|
inc esi |
|
jmp chat_now |
|
|
chatover: |
|
xor eax, eax ; SUCCESS! |
inc eax |
|
pop edx |
pop esi |
pop edi |
|
ret |
|
timeoutoccured: |
|
xor eax, eax ; FAIL! |
|
pop edx |
pop esi |
pop edi |
|
ret |
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; |
; scanaborts - scans the response from modem for abort srings |
; ESI - Response from modem |
; EDI - Pointer to Abort Table |
; ECX - Response Length |
; Returns 1 if abort detected, 0 otherwise |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
scanaborts: |
|
push esi |
push edi |
push ecx |
|
checkit: |
|
push esi |
repe cmpsb ; any abort matches? |
je abortdetected |
pop esi |
|
|
updatetbl: |
|
inc edi |
cmp byte [edi], '`' |
je noabortfound |
|
cmp byte [edi], 0 |
jne updatetbl |
|
inc edi |
|
jmp checkit |
|
abortdetected: |
|
pop esi |
pop ecx |
pop edi |
pop esi |
|
xor eax, eax ; SUCCESS! |
inc eax |
ret |
|
noabortfound : |
|
pop ecx |
pop edi |
pop esi |
|
|
xor eax, eax ; FAILED! |
ret |
|
|
|
|
|
|
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |