2015年1月25日

HPLIP bb-soap解析 - 4 - bb_end_page 和 bb_end_scan

前言:
接續前篇,這篇會將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()
bb_end_scan解析:
同前面,一樣把它溝通內容列出,共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,
還是因為我是測試,所以沒有成功取消。

沒有留言: