接續前篇,這篇會將bb_end_page和bb_end_scan一起po完,主要會是解析bb_end_scan,
因為從前面的flow可以發現,bb_end_page實際動作應該只有做hpmud_channel_close(),
其他幾乎沒看到在幹嘛,所以這篇主要就變成了bb_end_scan的解析。
在一開始時,嘗試要把Close Code Library自己實做,覺得似乎非常困難,
要知道這可是現成的事務機,要破解它的Protocol應該很難吧......
實際下去理解並dump它的通訊內容後,其實並不難,
整個flow看完理解後,我就在想,真的還需要補充實做bb_soap嗎?
自己參考SANE backends範例寫個CM1015專用的SANE backends算了,
反正底層一樣呼叫hpmud,其他就自己解決了。
而且看到現在,感覺已經偏了,怎麼好像在研究SOAP的感覺(加油,魔王只剩SOAP DIME了),
我並沒有想要理解SOAP啊.........
bb_end_page:
目前瞭解,看起來就只有呼叫hpmud_channel_close()。
所以這裡描述就是:
- bb_end_page
- hpmud_channel_close()
bb_end_scan:
動作流程如下:
- bb_end_scan
- hpmud_channel_open()
- hpmud_channel_write()
- hpmud_channel_write()
- hpmud_channel_write()
- hpmud_channel_write()
- hpmud_channel_read()
- hpmud_channel_read()
- hpmud_channel_read()
- hpmud_channel_read()
- hpmud_channel_close()
同前面,一樣把它溝通內容列出,共4個write、4個read。
write:
cat hpmud_write_channel_7.dump
POST / HTTP/1.1 Host: http:0 User-Agent: gSOAP/2.7 Content-Type: application/soap+xml; charset=utf-8 Transfer-Encoding: chunked Connection: close
cat hpmud_write_channel_8.dump
1b9前面已經知道,多出的部份就只是buffer沒清除,因此只列出神秘HEX數值。
cat hpmud_write_channel_9.dump
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wscn="http://tempuri.org/wscn.xsd"><SOAP-ENV:Body><wscn:CancelJob><ScanIdentifier>scanjob 10153</ScanIdentifier></wscn:CancelJob></SOAP-ENV:Body></SOAP-ENV:Envelope>
cat hpmud_write_channel_10.dump
0前面已經知道,多出的部份就只是buffer沒清除,因此只列出神秘HEX數值。
read:
cat hpmud_read_channel_16.dump
HTTP/1.1 200 OK Server: gSOAP/2.7 Content-Type: application/soap+xml; charset=utf-8 Transfer-Encoding: chunked Connection: close
cat hpmud_read_channel_17.dump
1B7前面已經知道,多出的部份就只是buffer沒清除,因此只列出神秘HEX數值。
cat hpmud_read_channel_18.dump
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wscn="http://tempuri.org/wscn.xsd"><SOAP-ENV:Body><wscn:CancelJobResponse><succeeded>false</succeeded></wscn:CancelJobResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
cat hpmud_read_channel_19.dump
0前面已經知道,多出的部份就只是buffer沒清除,因此只列出神秘HEX數值。
write解析:
雖然從XML看得出來,明顯很單純,但我們一樣用瀏覽器來看看,如下:
這裡訊息很簡單,就只有CancelJob和ScanIdentifier。
裡面帶的參數,就是前面bb_start_scan裡面帶的scanjob。
所以這裡合理的懷疑,
前面bb_start_scan,除了送出Scan參數外,
會對事務機發出一個掃描工作的request。
當掃描工作結束時,也就是這裡bb_end_scan,
會對事務機發出取消掃描工作的request,
通知事務機,掃描工作已結束或已完成,
事務機應該會在內部把這項掃描工作相關的資料結構刪除。
read解析:
同樣用瀏覽器看看,如下:
這裡可以看到,回傳的參數也很簡單,就只有successed。
這裡的false我不確定是固定回傳false,
還是因為我是測試,所以沒有成功取消。
沒有留言:
張貼留言