JP6521762B2 - Httpサーバとその制御方法、画像形成装置およびプログラム - Google Patents

Httpサーバとその制御方法、画像形成装置およびプログラム Download PDF

Info

Publication number
JP6521762B2
JP6521762B2 JP2015126872A JP2015126872A JP6521762B2 JP 6521762 B2 JP6521762 B2 JP 6521762B2 JP 2015126872 A JP2015126872 A JP 2015126872A JP 2015126872 A JP2015126872 A JP 2015126872A JP 6521762 B2 JP6521762 B2 JP 6521762B2
Authority
JP
Japan
Prior art keywords
http
port number
server
request
host name
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015126872A
Other languages
English (en)
Other versions
JP2017010388A5 (ja
JP2017010388A (ja
Inventor
邦匡 藤澤
邦匡 藤澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2015126872A priority Critical patent/JP6521762B2/ja
Priority to US15/180,386 priority patent/US10554723B2/en
Publication of JP2017010388A publication Critical patent/JP2017010388A/ja
Publication of JP2017010388A5 publication Critical patent/JP2017010388A5/ja
Application granted granted Critical
Publication of JP6521762B2 publication Critical patent/JP6521762B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/289Intermediate processing functionally located close to the data consumer application, e.g. in same machine, in same home or in same sub-network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/563Data redirection of data network streams
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • H04L69/162Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms

Description

本発明は、USBインターフェース経由で情報処理装置の設定を行うことが可能なHTTPサーバとその制御方法、画像形成装置およびプログラムに関する。
インターネットで接続された遠隔地のプリンタに対して印刷を行うための技術としてInternet Printing Protocol (IPP)が存在する。このIPPの拡張としてPCにUSBインターフェースで接続されたプリンタに対してIPPプロトコルで印刷をおこなう、IPP Over USBという技術が存在する。一方、ルータで区切られたネットワークの外部にあるクライアントから、ルータで区切られたネットワークの内部にあるプライベートアドレスが付与されたサーバには直接アクセスできない。そのためネットワークの外部と内部の接続(すなわちネットワーク間の接続の仲介を行う中間サーバにおいて、外部からアクセスされたポート番号により、内部のサーバに対して接続の振り分けを行うポートマッピングという技術が存在する。
特開2005−31725号公報
RFC 2910 Internet Printing Protocol/1.1: Encoding and Transport,インターネット,URL:https://tools.ietf.org/html/rfc2910,2000年9月
IPP over USBにおいてPC上のWebブラウザからUSBインターフェース経由で画像形成装置(以後MFP)のリモートUIに接続する場合、以下の経路で接続がおこなわれる。
(1)PC上でUSBインターフェースに接続されたMFP毎に仮想サーバが起動される。仮想サーバの動作するポート番号としてはMFP毎に適当な番号が割り当てられる。(例 54321番と54322番)
(2)PC上のWebブラウザは仮想サーバにアクセスを行う。このときHTTPプロトコルのHostヘッダは、PC内部の仮想サーバへのアクセスであるため「Host: localhost:54321」となる。
(3)仮想サーバはWebサーバのからのリクエストを変更せずにUSBのパケットに変換してUSBインターフェースを使用してリクエストをMFPに送信する。
(4)MFP上で動作するUSB-TCP変換モジュールはUSBインターフェースからのパケットを受信すると、USBのパケットに含まれるデータをそのままTCP/IPのパケットに変換する。変換したパケットをMFP上のポート番号8000番で動作している、リモートUIを実現するHTTPサーバに送信する。
(5)HTTPサーバはUSB-TCP変換モジュールから受信したリクエストを処理しようとするが、PC上のWebブラウザから送られたHostヘッダは「Host: localhost:54321」となっている。
このとき、8000番のポートで動作しているHTTPサーバにとって「Host: localhost:54321」であるリクエストはHTTPでは不正なリクエストであるため、HTTPの処理を行うことができなかった。PC上の仮想サーバの動作するポート番号(例えば54321)と同じポート番号で動作するHTTPサーバをMFP上で起動することにより、クライアントから仮想サーバ経由で受信したリクエストが不正なリクエストであることを回避可能である。
しかし、仮想サーバのポート番号には、MFPに接続されるPC毎に、USBポート毎に固有の番号が割り付けられる。そのため予めPC上の仮想サーバの動作するポート番号と同じポート番号で動作するHTTPサーバをMFP側で起動することは困難である。
本発明は上記従来例に鑑みて成されたもので、IPP Over USBのリクエストを受信したHTTPサーバに適切な処理を実行させることを目的とする。
上記目的を達成するために本発明は以下の構成を有する。
クライアントと同じデバイスに置かれたプロキシを経由してHTTPリクエストを送信する前記クライアントと接続されたHTTPサーバであって、
受信したHTTPリクエストが、前記HTTPサーバを指定したもの、または、前記プロキシを経由して送信されたもののいずれかであることを判定する判定手段と、
前記判定手段により前記いずれかである場合には、前記HTTPリクエストに応じて処理をし、いずれでもない場合にはエラーとして処理をする処理手段と
を有することを特徴とするHTTPサーバ。
本発明により、IPP Over USBのリクエストを受信したHTTPサーバは適切な処理を実行することができる。
本発明が実施されるシステムの構成を示す図である。 本発明が実施されるシステムのソフトウェアの構成を示す図である。 本発明のリモートUIを実現するHTTPサーバのソフトウェアの構成を示す図である。 実施形態1でWebブラウザからHTTPサーバに送られるデータを示す図である。 実施形態1の処理のフローチャートである。 実施形態2の処理のシーケンス図である。 実施形態2の処理のフローチャートである。 実施形態2の認証情報チェック処理のフローチャートである。 実施形態2のHTTPプロトコルデータを示す図である。 実施形態2のログインページを示す図である。 実施形態2のリダイレクト先文字列生成処理を示すフローチャートである。 実施形態2のHTTPサーバからWebブラウザに送られるデータを示す図である。 実施形態3のサーブレットからWebブラウザに送られるデータを示す図である。 実施形態3のレスポンスボディ書き込み処理のフローチャートである。 実施形態3のHTTP出力ストリーム取得要求処理のフローチャートである。 実施形態3のボディデータ書き込み処理のフローチャートである。 実施形態3のHTTP出力ストリームクローズ処理のフローチャートである。 USB-TCP変換モジュールのパケット変換処理のフローチャートである。 仮想サーバのパケット変換処理のフローチャートである。
以下、本発明を実施するための形態について図面を用いて説明する。
[実施形態1]
<システムのハードウェア構成>
図1は本実施形態のシステム構成図である。本システムはMFP100とUSBケーブル107で接続されたPC108で構成される。MFP100は、本発明を実現するソフトウェアを実行するCPU101、本発明を実現するソフトウェアを保存しているROM102、本発明を実現するソフトウェアを実行形式で格納するRAM104、本発明を実現するソフトウェアがデータを保存する外部記憶装置104、USBインターフェースを制御するUSB I/F制御部105、ネットワークI/F制御部109を含む。上記各モジュールはバス106によって相互に接続されておりデータのやり取りをおこなう。MFP100はネットワークI/F制御部109によってネットワーク110に接続されている。
<システムのソフトウェア構成>
図2は本実施形態のソフトウェアの構成図である。MFP100上ではHTTPサーバ201、USB-TCP変換モジュール202が動作している。HTTPサーバ201、USB-TCP変換モジュール202はローカルネットワーク203によって接続されている。ローカルネットワーク203は物理的なネットワークであってもよいが、ソフトウェアモジュール間をネットワークに準じたインターフェースで接続するための論理的あるいは仮想的なネットワークであってもよい。例えば、所定のループバックアドレスを指定したIPネットワークなどがローカルネットワーク203に該当する。HTTPサーバ201はネットワークI/F制御部109によりネットワーク110と接続されている。USB-TCP変換モジュール202はROM102からRAM104にロードされCPU101で実行される。さらにUSB I/F制御部105を使用してUSBパケットの送受信をおこなう。
PC108においては、MFP100とUSB107で接続されたUSBインターフェース205、ポート番号として54321が割り当てられた仮想サーバ206、Webブラウザ204が動作している。これらの動作については図4等を参照して後述する。またPC108は複数のUSBポートを備えており、もうひとつのUSBインターフェース207にはMFP209が接続されており、ポート番号として54322が割り当てられた仮想サーバ206が稼働している。なおPC108のウエブブラウザ204はHTTPサーバのクライアントであるので、ウエブブラウザ204またはPC108をクライアントと呼ぶこともある。さらに仮想サーバ206をプロキシと呼ぶ場合もある。
このような構成において、PC108から、IPP over USBを用いて、MFP110により印刷を行わせることができる。またPC108の代わりに、MFP100がUSBポートに接続されたプリンタサーバがネットワークに接続されているなら、IPP over USBを用いることで、当該プリンタサーバを介して遠隔のクライアントからMFP100を用いた印刷を実行できる。なおIPPは、背景技術の説明に記載したようにHTTPベースの技術であり、HTTPクライアント(Webブラウザ)とHTTPサーバとの間の通信はHTTPに従って実行される。すなわちTCP/IPをベースとしたHTTPによりIPPのメッセージがクライアントからMFP等のデバイスすなわち画像形成装置100に送信される。そして、画像形成装置100では、HTTPのデータを、IPPの規格に従って処理することで、メッセージに従って印刷が実行される。本実施形態はIPP over USBに係るものではあるが、本実施形態の発明は、IPP over USBにより生じるHTTPに関する不整合を解決するものであることから、以下ではHTTPに着目して説明される。
<HTTPサーバ>
図3はHTTPサーバ201のソフトウェアの構成を示す図である。HTTPサーバ201は、ネットワーク接続受付部301と0個以上のHTTPコネクション305、リダイレクト先URL文字列生成部322、サーブレット検索部323を有する。なおサーブレット321はHTTPサーバ201に追加されたプログラムモジュールであり、たとえばウエブページを動的に生成するサービスなどを提供する。
ネットワーク接続受付部301は、ネットワーク110とローカルネットワーク203それぞれから8000番のポートへの接続を待つ。そしてクライアントから8000番ポートに接続されるとクライアントと通信するための接続ソケット306を生成するサーバソケット302をもつ。本実施形態ではサーバソケット302は8000番ポートで接続を待っているが他の番号のポートを使用していてもよい。接続ソケット306は通信データの読み書きをそれぞれ行うためのソケット入力ストリーム307とソケット出力ストリーム308をもつ。ソケット306は、たとえばコネクションによる通信を実現するためのAPIであり、これを介して通信が行われることから、図3では接続ソケット306とネットワーク110およびローカルネットワーク203とが接続されているように示している。またストリームとは、データの入出力を行うために用意されたクラス或いは機能で、たとえばソケット入力ストリームであればSocketInputStreamなどのクラスとして定義される。しかしながら、本実施形態では、このような特定の言語処理系に依存することなくより一般的な意味でストリームという用語を用いる。すなわち入力ストリームとは例えばファイルのデータを読み込むメソッドおよびデータであり、出力ストリームとは例えばファイルのデータを書き込むメソッドおよびデータである。なお図においては、入力ストリームはInputStream、出力ストリームはOutputStreamなどと英語名称で表記している。
ネットワーク接続受付部301はソケット入力ストリーム307から読み込んだHTTPのリクエストを受信する。さらにネットワーク接続受付部301は、HTTPプロトコルの解釈、認証情報のチェックとHTTPコネクション305の生成を行うHTTP受付部303をもつ。さらにHTTPサーバ201は、HTTP受付部303で生成されたHTTPコネクション305の通信が終わるまでHTTPコネクション305を記憶しているコネクション管理部304をもつ。
HTTP受付部303はさらに、生成したHTTPコネクション305に接続ソケット306およびソケット入力ストリーム307、ソケット出力ストリーム308の情報を設定する。HTTP受付部303は接続ソケット306のソケット入力ストリーム307からHTTPのリクエストヘッダの読み込みをおこなう。さらにHTTP受付部303は読み込んだHTTPのリクエストヘッダをHTTPコネクション305のHTTPリクエスト309のリクエストヘッダのテーブル312に設定する。
HTTPコネクション305は、一般的には送信元および送信先それぞれのIPアドレスおよびTCPポート番号とプロトコル(図3ではHTTP)との組という、いわゆる5タプルで特定されるコネクションである。図3ではそのようなパラメータで特定されるHTTPサーバ201とサーブレット321との間の論理的な通信回線であるが、実際上は同一のデバイス上でに実行されるプログラム(またはプロセス或いはスレッド)間の通信を実現している。そのためHTTPコネクションは例えば、そこへの読み書きにより通信を実現するためのメモリ領域そのものである。HTTPコネクション305ではHTTPリクエストとHTTPレスポンスがHTTPサーバとサーブレットとの間で交換される。たとえばサーブレットによりHTTPリクエストの受信は、HTTPリクエストオブジェクトにより所定のメソッドを実行することにより行われ、同様にHTTPレスポンスの送信はHTTPレスポンスオブジェクトにより所定のメソッドを実行させることで行われる。以降の説明では、HTTPリクエストやHTTPレスポンスというデータそのものを、オブジェクトと特に区別することなく記載する。したがってたとえばHTTPレスポンスがデータであるかのように送受信の対象として記載されることもあるし、HTTPレスポンスが処理の実行主体として記載されることもある。
ネットワーク接続受付部301はHTTPプロトコルの解釈をおこない、HTTPメソッドの取得、リクエストURLの取得、HTTPリクエストヘッダの読み込みを行う。さらにサーブレット検索部323を使用しリクエストURLに対応するサーブレットを決定する。ネットワーク接続受付部301は決定したサーブレットをHTTPコネクション305に設定(接続)する。HTTPコネクション305はHTTP受付部303に設定された接続ソケット306を記憶している。HTTPコネクション305はHTTPリクエスト309とHTTPレスポンス310とを記憶しており、論理的な回線を構成している。
HTTPリクエスト309は、HTTP受付部303で取得されたHTTPメソッド、リクエストURL、リクエストURLをキーにサーブレット検索部323から取得したサーブレット321を、あるいはサーブレット321を特定する情報を記憶している。HTTPリクエスト309は、リクエストヘッダ名313とリクエストヘッダ値314とを含むリクエストヘッダのテーブル312をもつ。HTTPリクエスト309は、サーブレット321がデータの読み込みを行うためのHTTP入力ストリーム315を持つ。
サーブレット321はサーブレットの処理に応じてリクエストヘッダのテーブル312からリクエストヘッダを取得する。HTTP入力ストリーム315はソケット入力ストリーム307をラップしたストリームである。したがってHTTP入力ストリーム315はソケット入力ストリーム307を含み、さらに追加的な機能などを利用できる。サーブレット321はHTTP入力ストリーム315からリクエストボディを読み込んで処理をおこなう。
HTTPレスポンス310はレスポンス316、レスポンスヘッダ名318とレスポンスヘッダ値319から構成されるレスポンスヘッダのテーブル317をもつ。さらにサーブレット321がデータの書き込みを行うためのHTTP出力ストリーム320を持つ。
サーブレット321はサーブレットの処理に応じてレスポンスヘッダのテーブル317にレスポンスヘッダを追加する。レスポンス316と追加されたレスポンスヘッダはサーブレットがレスポンスボディの送信を行う前にソケット出力ストリーム308によりクライアントに対して送信される。HTTP出力ストリーム320はソケット出力ストリーム308をラップしたストリームである。すなわち、HTTP出力ストリーム320はソケット出力ストリーム308の提供する機能や情報を含む。サーブレット321はHTTP出力ストリーム320たいしてレスポンスボディを書き込みクライアントに対して送信する。
リダイレクト先URL文字列生成部322はサーブレットがリダイレクトレスポンス返す時にレスポンスヘッダであるLocationヘッダに設定するリダイレクト先URLの文字列を生成する。サーブレット検索部323はリクエストURLとサーブレットの対応表をもち、HTTP受付部303からリクエストURLを引数にサーブレットの要求があると対応するサーブレットを返す。
<WebブラウザからHTTPサーバに送られるデータの例>
図4はWebブラウザ204からHTTPサーバに送られるデータの一例を示す図である。たとえばWebブラウザ204からIPP over USBを用いてMFP100による印刷を行う場合、ユーザは、Webブラウザ204上で所定のアクセス先たとえば仮想サーバ206を指定してアクセスを試みる。
これに応じてPC108上で動作するWebブラウザ204は、同じPC108上の54321番ポートで起動している仮想サーバ206に対してリクエストをTCPパケット401として送信する。
TCPパケット401はパケットの送り先が同じPC内の54321番ポートで起動している仮想サーバ206であるため宛先であるIPアドレスとTCPポートの組はlocalhost:54321となる。また、TCPパケットに含まれるHTTPプロトコルのデータ402のうち、Hostヘッダ値も同じPC内の54321番ポートで起動している仮想サーバ206をしめす「localhost:54321」となる。Hostヘッダは、HTTPリクエストのコマンドに含まれており、ホスト名とポート番号とを含む。ホストヘッダは、クライアントがリクエストするサーバ(あるいはサービス)を特定ための識別情報ということもできる。ホスト名localhostは、ループバックデバイスすなわち現在のデバイス自身(この例ではPC108)を指し、IPv4では通常127.0.0.1に、IPv6では::1に割り当てられる。すなわちこれらは同じループバックデバイスを指すループバックアドレスあるいはローカルアドレスである。
<仮想サーバによる処理>
仮想サーバ206は、図19で示される処理を行い、Webブラウザ204から受信したTCPパケット401に基づいてUSBパケット403の生成、送信をおこなう。
仮想サーバ206が起動されると(ステップ1901)、仮想サーバ206は起動時に指定されたポート番号例えば54321番でサーバソケットをオープンする(ステップ1092)。そして仮想サーバ206はWebブラウザ204からの接続待ちをする(ステップ1903)。仮想サーバ206の起動は、たとえばWebブラウザの起動と同時であってもよいし、PC108の起動をきっかけとしてであってもよい。
仮想サーバ206はWebブラウザ204から接続されてリクエストを受信すると(ステップ1904)、ソケットからWebブラウザ204からのリクエストデータを読み込む(ステップ1905)。ステップ1904で受信するリクエストが図4のTCPパケット401に相当する。仮想サーバ206はステップ1905で読み込んだデータからUSBパケット403を生成し(ステップ1906)、USBインターフェース205を使ってUSBパケット403を送信する(ステップ1907)。
さらに仮想サーバ206はUSBインターフェース205からレスポンスデータが返ってくるのを待ち、レスポンスデータのUSBパケットを受信する(ステップ1908)。次に仮想サーバ206はステップ1908で取得したUSBパケットからデータを取得し(ステップ1909)、ソケットに取得したデータを書き込み(ステップ1910)、ステップ1902に遷移して次のWebブラウザ204から接続を待つ。
ここで仮想サーバ206で生成されるUSBパケット403はUSBケーブル107で接続されたMFPに割り当てた所定のアドレスおよびポート番号を宛先情報として持つ。さらにUSBパケット403はデータ404としてTCPパケット401のデータ部402に含まれるHTTPプロトコルのデータと同じデータをもつ。すなわち、ホストヘッダの内容はTCPパケットからUSBパケットに引き継がれる。
<USB-TCP変換モジュールによる処理>
仮想サーバ206からUSBインターフェース205に対して送信されたUSBパケットはUSBインターフェース205やUSB I/F制御部105を介してUSB-TCP変換モジュール202により受信される。USBパケット403を受信したUSB-TCP変換モジュール202は図18の処理をおこないTCPパケット405を作成する。さらにUSB-TCP変換モジュール202はローカルネットワーク203を通じてHTTPサーバ201にリクエストを送信する。
USB-TCP変換モジュール202が起動する(ステップ1801)と、USBからのデータの受信を待つ(ステップ1802)。USB-TCP変換モジュール202は例えばMFP100の起動とともに起動される。
USB-TCP変換モジュール202は仮想サーバ206からデータを受信するとステップ1803にすすみ、USBパケット403を受信する(ステップ1803)。USB-TCP変換モジュール202はUSBパケット403からデータ404を取得する(ステップ1804)。USB-TCP変換モジュール202は同じMFP上の8000番ポートで起動しているHTTPサーバ201に対して接続し(ステップ1805)、接続によりえられたソケットに対してデータを書き込む(ステップ1806)。ステップ1806で書き込まれたデータはTCPパケット405としてローカルネットワーク203を通じてHTTPサーバ201に送信される。TCPパケット405の宛先は、USB-TCP変換モジュール202が稼働するデバイスと同じMFP100内の8000番ポートで起動しているHTTPサーバ201であるためlocalhost:8000となる。
一方、TCPパケット405に含まれるHTTPプロトコルのデータ406はUSBパケット403のデータ404をそのまま送信するため、そこに含まれたHostヘッダ値は「localhost:54321」となる。このように、パケットの宛先は、仮想サーバ206とUSB-TCP変換モジュール202とにおいて「localhost:54321」→「MFP1」→「localhost:8000」と遷移するのに対して、hostヘッダ値は「localhost:54321」のまま変わることがない。
図5はHTTPサーバ201がリクエストを受信した時のHostヘッダのチェック処理を示すフローチャートである。HTTPサーバ201がTCPパケット405を受け取ると、HTTP受付部303はHTTPプロトコルのデータ406のリクエスト受信処理を開始する(ステップ501)。
HTTP受付部303はHTTPプロトコルのデータ406を読み込みHTTPリクエスト、リクエストヘッダの取得をおこう。そしてHTTPコネクション305を生成して接続ソケット、HTTPリクエスト407、リクエストヘッダ408の値をHTTPコネクション305のHTTPリクエスト309に設定する(ステップ502)。HTTPリクエスト407はサーバに対する要求(メソッド)、リクエスト先をしめすURL、HTTPのバージョン情報から構成され、サーバ上のどのリソースにどのような要求をするかが記述されている。リクエストヘッダ408はリクエストに付随する属性情報をサーバに通知するものである。
HTTP受付部303はHTTPコネクション305のHTTPリクエスト309のリクエストヘッダ312に保存したHostヘッダの値を取得する(ステップ503)。
HTTP受付部303はステップ503で取得したHostヘッダからホスト名を取得する(ステップ504、さらにポート番号を取得する(ステップ505)。HTTP受付部303はステップ504で取得したホスト名がMFP100のホスト名、MFP100のIPアドレス、localhost、127.0.0.1のうちのいずれかに該当するかをチェックする(ステップ506)。HTTPリクエストヘッダのホスト名が、MFP100のホスト名、MFP100のIPアドレスのいずれかであれば、そのパケットはMFP1に宛てられてものである。一方、ホスト名がlocalhost、127.0.0.1のいずれかすなわちループバックアドレスであれば、IPP over USBを用いるべく仮想サーバ206を経由してMFP100に送信されたパケットであると判定できる。ステップ506のチェックでHostヘッダのホスト名がMFP100のホスト名、MFP100のIPアドレス、localhost、127.0.0.1のいずれかである場合、すなわちMFP100が受信すべきパケットであれば、ステップ507に遷移する、そうでなければステップ513に遷移する。
ステップ507では、HTTP受付部303はステップ505で取得したHostヘッダのポート番号がHTTPサーバ201が動作しているポート番号(或いはHTTPサーバが接続を監視しているポート番号)と等しいかをチェックする。ステップ507のチェックでポート番号が等しければ、すなわちHTTPサーバ201に宛てたパケットであればステップ508に遷移し、等しくなければステップ511に遷移する。受信したHTTPリクエストが仮想サーバ206(すなわちプロキシ)に宛てられ、そこで転送されてきた場合にはステップ507でノーと判定されてステップ511に分岐する。したがってステップ511へ分岐した場合、IPP over USBでHTTPリクエストを受信した可能性がある。 ステップ511では、HTTP受付部303は、ステップ504で取得したホスト名がlocalhost、127.0.0.1すなわちループバックアドレスであるかをチェックする。ループバックアドレスは、IPP over USBを用いるべく仮想サーバ205を経由して受信したパケットに用いられている。したがってlocalhost、127.0.0.1であればすなわちIPP over USBのパケットの可能性があればステップ512に遷移する。localhost、127.0.0.1でなければこのパケットは誤ったパケットとしてステップ513に遷移する。
ステッ512では、HTTP受付部303はHTTPサーバ201に接続してきたクライアントのアドレスすなわちリクエストの送信元アドレスがローカルループバックアドレスであるかを調べる(ステップ512)。送信元アドレスがローカルループバックアドレスであるのは、送信元がUSB-TCP変換モジュール205の場合である。ローカルループバックアドレスであれば、このパケットはIPP over USBのパケットであると判定できるのでステップ508に遷移してHTTPの処理を行う。ローカルループバックアドレスでなければ不正なHostヘッダを持つリクエストであると判断して、ステップ513に遷移してエラー処理をおこなう。
ステップ508でHTTP受付部303はHTTPリクエスト407のリクエストURLをキーにサーブレット検索部323から処理を行うサーブレット321を取得しサーブレット321に処理を要求する(ステップ508)。サーブレット321はリクエストを受け取るとレスポンスデータを生成し(ステップ509)、生成したレスポンスデータをクライアントに対して送信する(ステップ510)。
ステップ513でHTTP受付部303はエラーレスポンスを生成し、クライアントに対してエラーレスポンスを送信する(ステップ514)。
この手順では、図4のTCPパケット405に含まれるHTTPプロトコルのデータ405のHostヘッダ値は「localhost:54321」であるため、ステップ507でステップ511に遷移する。TCPパケット405はHTTPサーバ201と同じMFP100で動作するUSB-TCP変換モジュール202によってローカルネットワークを通じてHTTPサーバに送られる。よってHTTPサーバ201に接続してきたクライアントのアドレスはローカルループバックアドレスである。そのためステップ512からステップ508に遷移し、Hostヘッダ値のポート番号がHTTPサーバ201の動作するポート番号と異なっていてもHTTPの処理がおこなわれる。なお、HTTPサーバ201が仮想サーバ206から受信するパケットの送信元アドレスはループバックアドレスが指定されている。
以上の構成及び手順によって、本実施形態の画像形成装置は、IPP over USBプロトコルに従ってホスト装置であるPC等から受信したHTTPリクエストなどのメッセージを、プロトコルヘッダに含まれた宛先や送信元の情報に基づいてIPP over USBプロトコルのメッセージであるか否か判定する。このため不要なエラーを発生させることなく適切にメッセージを処理することが可能となる。
なお図5のステップ506,507,511,512の判定は、この順序で行われなくともよい。正常なHTTPリクエストとして判定される第1のケースは、ホストヘッダのホスト名がMFPまたはローカルホスト(またはループバックアドレス)を示し、かつポート番号がHTTPサーバを示す場合である。このケースは例えばLANを介した或いはデバイス内部からのHTTPサーバに対するリクエストである。ローカルホストとループバックアドレスはローカルデバイス自身を示す点において同じ意味を持つ。第2のケースは、ホストヘッダのホスト名がローカルホスト(またはループバックアドレス)を示し、TCPパケットの送信元アドレスもループバックアドレスを示す場合である。これはクライアントデバイスの内部で当初の送信が行われたことを示しており、仮想サーバを用いるIPP over USBで送信されたリクエストであると判定できる。これら第1のケースと第2のケースとを受け入れ可能なHTTPリクエストと判定する方法であれば、各項目の判定順序はどのようなものであってもよい。
[実施形態2]
実施形態2は実施形態1を前提に実施される。図7は本実施形態においてHTTPのリクエストを受信した時のHTTPサーバ201、ユーザ認証をおこなうLogin601、リモートUIを提供するRUIサーブレット632それぞれの処理を示すフローチャートである。ここでlogin601は、認証情報のチェック、ログインページの生成、ログインリクエストの処理を行うモジュールでログイン或いはログインモジュールとも呼ぶ。
HTTPサーバ201のHTTP受付部303はHTTPのリクエストを受信するとHTTPリクエスト受信処理を開始する(ステップ701)。HTTP受付部303は実施形態1のHostヘッダのチェックを実施する(ステップ722)。ステップ722の実体は図5の手順のうちステップ502〜S507と511〜514に相当する。リクエストに対する処理であるステップ508および509は、図7ではステップ702以降で実行される処理に相当する。ここで本フローチャートではステップ701においてHostヘッダのチェックが成功したとする。不成功の場合にはステップ513、514でエラーレスポンスが応答される。
HTTP受付部303は、HTTPリクエスト309のリクエスト311に保存されているリクエストURLがlogin601へ認証要求を行うためのURLである「/login」であるかをチェックする(ステップ702)。リクエストURLが「/login」であればステップ710に遷移する。「/login」でなければステップ703に遷移する。
ステップ703でHTTP受付部303はlogin601に対して認証チェック要求をおこなう。これに対してlogin601は認証情報チェック処理をおこない、処理結果を示す情報をHTTP受付部303に返す(ステップ709)。ステップ709の詳細は図8で説明する。
ステップ705でHTTP受付部303はlogin601から受信した認証情報チェック処理結果をチェックする(ステップ705)。認証がOKであれば、すなわちリクエストに係るユーザがログインユーザであれば、ステップ706に遷移する。NGであれば、すなわちリクエストに係るユーザがログインユーザでなければlogin601に対して認証レスポンス処理(ステップ711、712)を要求する。ステップ711でlogin601はログインをおこなうためのログインページ1001(図10参照)を生成し、ステップ711で生成したログインページをレスポンスとしてクライアントに返信する(ステップ712)。
図10に示す様に、ログインページ1001は、IDの入力フィールド1002、パスワードの入力フィールド1003、ログイン後に表示する転送先URLの情報1004、ログインリクエストをサーバに送信するためのLoginボタン1005を含むよう構成される。転送先URLの情報1004はHTMLのフォームのhidden要素としてHTMLに記載されている。ユーザがログイン操作を行うと入力されたID、パスワード、ログイン後に表示する転送先URLの情報1004を含むリクエストボディをもつPOSTリクエストがHTTPサーバ201に送信される。ログインページ1001は、IDとパスワードとを認証情報として使用する認証を行う場合の例である。ログイン後に表示する転送先URLの情報1004以外は認証方式によって変化してもよい。
認証結果がOKであった場合には、ステップ706でHTTP受付部303はHTTPリクエストのリクエストURLをキーにサーブレット検索部323からサーブレットを取得する(ステップ706)。次にステップ706で取得したサーブレットに対してページ生成を要求する(ステップ707)。図7の例ではリクエストTRLで指定されたサーブレットはリモートUIサーブレット632であるものとする。
ページ生成要求をうけたRUIサーブレット632はリモートUIのHTMLページを生成する(ステップ720)。そしてクライアントに対してステップ720で生成したリモートUIのページをレスポンスとしてクライアントに返信し(ステップ721)、HTTPリクエスト受信処理を終了する(ステップ708)。
一方、login601はステップ710で、HTTPリクエストのリクエストメソッドがGETであるかPOSTであるかをチェックする(ステップ710)。GETであればステップ711に遷移してログインページの生成をおこなう。POSTであればステップ713に遷移する。ステップ713でlogin601はPOSTリクエストのリクエストボディを解析してID、パスワード、転送先URLを取得する(ステップ713)。転送先URLは、ログインのためのUI1001に予め設定されて含まれていた転送先URL/RUI1004である。次にlogin601はステップ713で取得したIDとパスワードを用いて認証をおこなう(ステップ714)。認証がOKであればステップ715に遷移する。NGであればステップ711に遷移してログインページの生成をおこなう。
ステップ715でlogin601はログイン済みであることを示すloginsessionデータ(ログインセッションデータ)を生成する(ステップ715)。さらにHTTPレスポンス310のレスポンスヘッダ318にステップ715で生成したloginsessionデータをレスポンスヘッダSet-Cookieとして設定する(ステップ716)。また生成したloginsessionデータは、現在維持されているセッションを特定するためのデータとしてlogin601により保持される。複数のセッションが同時に存在している場合にも、セッションごとにloginsessionデータは生成され、応答され、保持される。レスポンスヘッダはレスポンスデータとしてクライアントに送信されるヘッダ情報である。次にlogin601はステップ713で取得した転送先URLを引数にHTTPサーバ201のリダイレクト先URL文字列生成部322に対してリダイレクト先URLの文字列の生成を要求する(ステップ717)。login601からリダイレクト先URLの文字列の生成を要求されたHTTPサーバ201のリダイレクト先URL文字列生成部322はリダイレクト先文字列を生成し(ステップ704)、login601に返す。ステップ704の詳細は図11を参照して説明する。
login601はリダイレクト先URL文字列生成部322で生成されたリダイレクト先文字列をHTTPレスポンス310のレスポンスヘッダ318にレスポンスヘッダLocation(レスポンスヘッダロケーション)として設定する(ステップ718)。次にlogin601はクライアントに対してリダイレクトを要求するリダイレクトレスポンスを返信する(ステップ719)。このときのレスポンスヘッダ318に保存されている、loginsessionデータが設定されたSet-Cookieヘッダ、Locationヘッダ、そして他のレスポンスヘッダの情報もクライアントに送信される。ここでCookie(クッキー)としてクライアントに返送されたloginsession(ログインセッション)データは、セッションを特定するための情報である。ログインセッションデータはユーザのログインに応じて発行され、当該ユーザがログアウトするまで、クッキーヘッダとして含まれている。
<認証情報チェック>
図8はlogin601で実行される認証情報チェック(ステップ709)のフローチャートである。HTTPサーバ201からの要求によりlogin601は認証情報チェックを開始する(ステップ801)。login601はHTTPコネクション305のHTTPリクエスト309のリクエストヘッダ312からCookieヘッダの値を取得する(ステップ802)。login601はCookieヘッダから認証識別子であるloginsessionの値の取得を試みる(ステップ803)。
login601はステップ803でloginsessionが取得できたかをチェックする(ステップ804)。取得できていなければ非ログイン状態としてステップ808に遷移し、チェック結果として認証情報チェックNGをHTTPサーバ201に返し(ステップ808)、認証情報チェック処理を終了する(ステップ807。取得できていたらステップ805に遷移する。login601はステップ803で取得したloginsessionが有効な認証識別子であるかをチェックすなわち判定する(ステップ805)。
loginsessionが有効であればlogin601は認証情報チェックOKをHTTPサーバ201に返し(ステップ806)、認証情報チェック処理を終了する(ステップ807)。無効であれば認証情報チェックNGKをHTTPサーバ201に返し(ステップ808)、認証情報チェック処理を終了する(ステップ807)。有効なloginsessionとは、たとえば、login601に現在のセッションを特定する情報として保持されたloginsessionと一致するものである。
<リダイレクト先URL文字列生成処理>
図11はHTTPサーバ201のリダイレクト先URL文字列生成部322でのリダイレクト先URL文字列生成処理(ステップ704)のフローチャートである。リダイレクト先URL文字列生成部322はリダイレクト先URL文字列生成処理を開始する(ステップ1101)。このときステップ713で取得した転送先URLが引数として与えられる。リダイレクト先URL文字列生成部322は文字列redirectに「http://」を代入する(ステップ1102。リダイレクト先URL文字列生成部322はHTTPコネクション305のHTTPリクエスト309のリクエストヘッダ312に保存されているHostヘッダの情報を取得する(ステップ1103)。リダイレクト先URL文字列生成部322はステップ1103で取得したHostヘッダの情報からホスト名を取得する(ステップ1104)。さらにポート番号を取得する(ステップ1105)。
次にリダイレクト先URL文字列生成部322はステップ1103で取得したホスト名とステップ1104で取得したポート番号とをチェックする(ステップ1106)。ステップ1106では、取得したホスト名が「localhost」かつ、取得したポート番号が、HTTPサーバ201が動作しているポート番号以外の値(たとえば54321)と等しいか判定する。該当すればステップ1107に遷移する。該当しなければステップ1110に遷移する。ステップ1107では、リダイレクト先URL文字列生成部322は文字列 redirectにHostヘッダの値を追加する(ステップ1107)。たとえばIPP over USBのパケットであれば、ホストヘッダのホスト名はlocalhostであり、かつ、ポート番号は仮想サーバ206のポート番号54321であるのでステップ1107が実行されて、例えば文字列redirectは「http://localhost:54321」などの値となる。
次にリダイレクト先URL文字列生成部322は転送先URLをリクエストパスとして文字列redirectに追加する(ステップ1108)。次にリダイレクト先URL文字列生成部322はリダイレクト先URL文字列生成処理を終了し(ステップ1109)、login601に生成したリダイレクト先URLの文字列redirectを返す。
一方、HTTPリクエストのホスト名がlocalhost以外であるか、またはポート番号がHTTPサーバのポート番号8000であるとステップ1106で判定された場合には、ステップ1110が実行される。ステップ1110でリダイレクト先URL文字列生成部322は、文字列redirectに、ステップ1104で取得したHost名を追加する(ステップ1110)。次にリダイレクト先URL文字列生成部322は文字列 redirectに「:」を追加する(ステップ1111)。次にリダイレクト先URL文字列生成部322はHTTPサーバ201が動作しているポート番号を文字列redirectに追加し(ステップ1112)、ステップ1108に遷移する。ステップ1112では、たとえば「http://ホスト名:8000」が文字列redirectとして生成される。このようにしてリダイレクト先のURLが生成され、login601に返される。
<実施形態2の処理のシーケンス例>
図6は実施形態2の処理の一例を示すシーケンス図である。Webブラウザ204は仮想サーバ205に対してMFP100の設定を行うためリモートUI(RUI)へのリクエスト901を送信する(ステップ602)。ここでリクエスト901の一例を図9に示した。第1行目はRUIすなわちリモートUIモジュールに対するHTTP/1.1のhttp GETリクエストであることを示し、第2行目にはホストヘッダにホスト名としてlocalhostが、ポート番号として54321が記述され、リクエストの宛先が仮想サーバ205であることが示されている。
リクエスト901を受信した仮想サーバ205は、Webブラウザ204から受信したリモートUIへのリクエスト901をTCP/IPからUSBパケットに変換してUSBインターフェースを介してUSB-TCP変換モジュール202へ送信する(ステップ603)。USB-TCP変換モジュール202は仮想サーバ205から受信したリモートUIへのリクエスト901をTCP/IPパケットに再変換してHTTPサーバ201に送信する(ステップ604)。
HTTPサーバ201はLogin601に対して認証チェックを要求する(ステップ605)。認証チェックを要求されたLogin601はステップ709(図8参照)の認証チェックを行う。リクエスト901にはCookieヘッダがないためloginsessionを取得することができないので、図8のステップ808が実行されLogin601からは認証チェックNGが返る(ステップ606)。そのためステップ705のチェックはNGとなりHTTPサーバ201はLogin601に対してログインページの生成を要求する(ステップ607)。
Login601は図10のようなログインページを生成する(ステップ608)ので、HTTPサーバ201はUSB-TCP変換モジュール202に対してレスポンス902を返す(ステップ609)。レスポンス902の例も図9に示す。レスポンス902には、リクエストが成功したことを示すコード200 OKと、生成されたログインページとが含まれている。USB-TCP変換モジュール202は仮想サーバ205に対してレスポンス902を返す(ステップ610)。仮想サーバ205はWebブラウザ204にレスポンス902を返す(ステップ611)。
レスポンスとしてクライアント108に送信されたログインページはWebブラウザ204により表示される。ログインページ1001上でユーザによってIDおよびパスワードが入力されてログインボタンが押下されると、Webブラウザ204は仮想サーバ205に対してログインリクエスト903を送信する(ステップ612)。ログインリクエスト903の一例も図9に示す。ログインリクエスト903には、Post であること、要求先がlogin601であること、httpバージョン1.1であることが示され、ホストヘッダとしてホスト名localhostおよびポート番号54321が示されている。また入力された認証情報であるIDおよびパスワードと、リクエストパスが示されている。図9ではリクエストパスとして「要求ページ/RUI」すなわちRUIに対するリクエストであることおよび要求するページが示されている。
仮想サーバ205はWebブラウザ204から受信したログインリクエスト903をUSB-TCP変換モジュール202へ送信する(ステップ613)。USB-TCP変換モジュール202は仮想サーバ205から受信したログインリクエスト903をHTTPサーバ201に送信する(ステップ614)。
ログインリクエスト903を受信したHTTPサーバ201がログインリクエストのチェック(ステップ702)をおこなうと、リクエストURLは「/login」であるためlogin601に対して認証処理を依頼する(ステップ615)。まずステップ710でリクエストメソッドのチェックをおこなうとログインリクエスト903のリクエストメソッドはPOSTなのでlogin601は図7のステップ713〜716の認証処理を実行する。さらにlogin601はHTTPサーバ201に対してダイレクト先URL文字列生成処理(図7のステップ704)を要求する(ステップ616)。このときパラメータとして、リクエスト903に記述されたリクエストパスの一部である「/RUI」を要求と共に送信する。
URL文字列生成処理は、Hostヘッダの値が「localhost:54321」であるため、それにパラメータ「/RUI」を付加して「http://localhost:54321/RUI」というリダイレクト先URL文字列を生成しlogin601に返す(ステップ617)。HTTPサーバ201からリダイレクト先URL文字列が返ってくると、login601はLocationヘッダにリダイレクト先URL文字列を設定する(ステップ718)。さらに認証レスポンス904をHTTPサーバ201に返す(ステップ618)。認証レスポンス904の一例も図9に示す。認証レスポンス904は、HTTPステータスコードとして、リクエストされたリソースが一時的に移動していることを示すコード302(Moved Temporarily)を持ち、移動先のURLとして生成されたリダイレクト先URL文字列が含まれている。さらに、Set-Cookieとしてセッションを固有に特定するためのloginsessionが設定されている。
HTTPサーバ201はUSB-TCP変換モジュール202に対して認証レスポンス904を返す(ステップ619)。USB-TCP変換モジュール202は仮想サーバ205に対して認証レスポンス904を返す620。仮想サーバ205はWebブラウザ204に認証レスポンス904を返す(ステップ621)。
図12はHTTPサーバ201からWebブラウザ204へ619〜621のシーケンスで送られるパケットを示す図である。ステップ619では認証レスポンス904のTCPパケット1201がHTTPサーバ201からUSB-TCP変換モジュール202に送られる。このときのTCPパケット1201に含まれるデータ1202にはHTTPのレスポンスヘッダ「Location: http://localhost:54321/RUI」が含まれている。
USB-TCP変換モジュール202でTCPパケット1201はUSBパケット1203に変換され仮想サーバ205に送られる。USBパケット1203のデータ1204にはHTTPのレスポンスヘッダ「Location: http://localhost:54321/RUI」が含まれている。
USB-TCP変換モジュール202でUSBパケット1203はTCPパケット1205に変換されWebブラウザ204に送られる。TCPパケット1205に含まれるデータ1206にはHTTPのレスポンスヘッダ「Location: http://localhost:54321/RUI」が含まれている。認証レスポンス904はステイタス「302」、Locationヘッダ「http://localhost:54321/RUI」、Set−Cookieヘッダ「loginsession=912804821; path=/」を持っている。そのためWebブラウザ204は自動的に、同じPC108の54321番ポートで動作している仮想サーバ205に対してリモートUIへのリクエスト905を送信する(ステップ622)。さらにWebブラウザ204は、図9に示す様に、認証レスポンス904のSet−Cookieヘッダで設定されたCookieヘッダ「loginsession=912804821」をリモートUIへのリクエスト905に含める。
仮想サーバ205はWebブラウザ204から受信したリモートUIへのリクエスト905をUSB-TCP変換モジュール202へ送信する(ステップ623)。USB-TCP変換モジュール202は仮想サーバ205から受信したリモートUIへのリクエスト905をHTTPサーバ201に送信する(ステップ624)。
HTTPサーバ201はLogin601に対して認証チェックを要求する(ステップ625)。認証チェックを要求されたLogin601はステップ709の認証チェックを行う。リクエスト905はCookieヘッダ「loginsession=912804821」をもつのでステップ804のチェックではステップ805に遷移する。このログインセッションは有効であるのでステップ806に進みLogin601は認証チェックOKをHTTPサーバ201に返す(ステップ626)。
Login601から認証チェックOKがかえってきたのでHTTPサーバ201はステップ706に進みサーブレット検索部323からリクエストURL 「/RUI」をキーにサーブレットを取得する(図7のステップ706)。次にステップ706で取得したRUI サーブレット632に対してRUIページ生成を要求する(図7のステップ707、627)。
RUIサーブレット632はRUIページを生成し(図7のステップ720)、RUIレスポンス906を返す(ステップ628)。RUIレスポンスにはリクエストされたRUIページが含まれている。HTTPサーバ201はUSB-TCP変換モジュール202に対してRUIレスポンス906を返す(ステップ629)。USB-TCP変換モジュール202は仮想サーバ205に対してRUIレスポンス906を返す630。仮想サーバ205はWebブラウザ204にRUIレスポンス906を返す(ステップ631)。
このようなシーケンスにより、Webブラウザ204はRUIレスポンス906を受信し、リモートUIの画面の表示を行う。以後、リモートUIによるMFP100の設定操作は622〜631のシーケンスと同様に実行される。
以上のようにして、ログインリクエストに対して画像形成装置100から仮想サーバ205へと指定したURLへとリダイレクトさせる応答をWebブラウザ204に返すことで、Webブラウザ204によりログイン後に仮想サーバへとリクエストを送信させることができる。
[実施形態3]
実施形態3は実施形態1、2を前提に実施される。図14はサーブレット321によるレスポンスボディデータ書き込み処理のフローチャートである。サーブレット321はレスポンスボディデータ書き込み処理を開始する(ステップ1401)。なお本実施形態ではHTTPレスポンスは単なる応答データではなくオブジェクトとしてその説明が記載される。したがって、例えば図14、図15などでは、HTTPレスポンスが実行主体として処理を遂行するような記載がある。これはHTTPレスポンスオブジェクトに定義されたメソッドの実現であり、たとえば実行主体はサーブレット321であり、サーブレット321が呼び出した手続きによりHTTPレスポンスが作成されるものと理解してもよい。
図14において、まず、サーブレット321はHTTPレスポンス310からHTTP出力ストリーム320を取得する(ステップ1402)。サーブレット321はステップ1402で取得したHTTP出力ストリーム320に対してサーブレット321固有のロジックにより生成されたボディデータの書き込みを行う(ステップ1403)。さらにサーブレット321はサーブレット321が書き込むべきボディデータのすべての書き込みが完了したかを判断する(ステップ1404。終了してなければステップ1403に遷移し書き込みを続行する。終了していればステップ1405に遷移する。ボディデータの書き込みが完了したらサーブレット321はHTTP出力ストリーム320のクローズ処理を行い(ステップ1405)、スポンスボディデータ書き込み処理を完了する(ステップ1406)。
図15はステップ1402でのHTTP出力ストリーム320取得の詳細な処理のフローチャートである。ここで実行主体として記載するHTTPレスポンスは単なる応答データではなく、前述したようにオブジェクトであってメソッドを実行できる。そのためHTTPレスポンスは、ここではひとつのプログラムモジュールとみなされてもよい。
サーブレット321からHTTP出力ストリーム320取得要求が行われるとHTTPレスポンス310はHTTP出力ストリーム320取得処理を開始する(ステップ1501)。HTTPレスポンス310はレスポンスヘッダ317にContent-Lengthヘッダが設定されているかをチェックする(ステップ1502)。設定されていなければChunked Encoding(チャンク形式エンコーディング)によるボディデータの送信をおこなうとしてステップ1503に遷移する。設定されていたらContent-Length(コンテンツ長)ヘッダの情報をつかって送信データサイズの管理を行うとしてステップ1506に遷移する。なお、チャンク形式エンコーディングは、ボディデータすなわち送信対象のデータを任意のサイズの塊(チャンク)に分割し、チャンクのサイズを記述したヘッダを付加するエンコード方式である。
HTTPレスポンス310はHTTPリクエスト309のリクエストヘッダ312に保存されているHostヘッダの情報を取得するに。さらにHost名がlocalhostかつ、ポート番号が、HTTPサーバ201が動作しているポート番号(例えば8000)以外の番号であるかをチェックする(ステップ1503)。ステップ1503の判定結果がイエス、すなわちホスト名がlocalhostかつHTTPサーバ201が動作しているポート番号以外の番号である場合はステップ1504に遷移する。そうでなければあればステップ1509に遷移する。
ステップ1504でHTTPレスポンス310はChunked Encodingによるボディデータの送信かつポート番号置換をおこなうHTTP出力ストリーム1510を生成する。そして生成したHTTP出力ストリーム1510をサーブレット321に対して返す。そしてHTTP出力ストリーム320取得処理を終了する(ステップ1505)。
ステップ1509でHTTPレスポンス310はChunked Encodingによるボディデータの送信をおこなうHTTP出力ストリーム1511を生成しサーブレット321に対して返す。そしてHTTP出力ストリーム320取得処理を終了する(ステップ1505)
ステップ1506でHTTPレスポンス310はHTTPリクエスト309のリクエストヘッダ312に保存されているHostヘッダの情報を取得する。そしてHost名がlocalhostかつ、ポート番号がHTTPサーバ201が動作しているポート番号以外の番号であるかをチェックする(ステップ1506)。ステップ1506の判定結果がイエス、すなわちホスト名がlocalhostかつHTTPサーバ201が動作しているポート番号以外の番号である場合、ステップ1507に遷移する、そうでなければステップ1508に遷移する。
ステップ1507でHTTPレスポンス310はContent-Lengthヘッダによるボディデータの送信かつポート番号置換をおこなうHTTP出力ストリーム1512を生成する。そして生成したHTTP出力ストリーム1512をサーブレット321に対して返す(ステップ1507)。そしてHTTP出力ストリーム320取得処理を終了する(ステップ1505)。
ステップ1508でHTTPレスポンス310はContent-Lengthヘッダによるボディデータの送信をおこなうHTTP出力ストリーム1513を生成しサーブレット321に対して返す(ステップ1508)。そしてHTTP出力ストリーム320取得処理を終了する(ステップ1505)。
図16はステップ1403でのHTTP出力ストリーム320へのボディデータの書き込み処理の詳細なフローチャートである。サーブレット321からHTTP出力ストリーム320にボディデータの書き込みがおこなわれるとボディデータ書き込み処理が開始される(ステップ1601)。ここでの処理のソフトウェア上の主体はHTTP出力ストリーム320であり、出力ストリームと同様にたとえばHTTP出力ストリームオブジェクトに定義されたメソッドの実行により実現される。
HTTP出力ストリーム320がChunked Encodingによるボディデータの送信かつポート番号置換をおこなうHTTP出力ストリーム1510の場合はステップ1602から処理を行う。
ステップ1602ではHTTP出力ストリーム320はサーブレット321から書き込まれたデータに含まれるリンク情報をチェックする。ホスト名がlocalhostで、かつポート番号がHTTPサーバ201が動作しているポート番号のリンク情報を含む場合、ステップ1603に遷移する。含まない場合ステップ1604に遷移する。ステップ1603でHTTP出力ストリーム320はポート番号をリクエストヘッダ312に保存されているHostヘッダに記載されたポート番号(すなわちサーバのポート番号以外の番号)に置換する(ステップ1603)。ステップ1604でHTTP出力ストリーム320はデータの長さを計りチャンクサイズを決定する(ステップ1604)。なお、RUIのサーブレット321が書き込むクライアントへの応答データの実体には、クライアントに提示するページを示すホスト名とポート番号のリンク(参照)を含んでいる。
ステップ1605でHTTP出力ストリーム320はステップ1604で計算したチャンクサイズとデータを出力ストリーム308に書き込み、ボディデータ書き込み処理を終了する(ステップ1606)。
HTTP出力ストリーム320がChunked Encodingによるボディデータの送信をおこなうHTTP出力ストリーム1511の場合はステップ1604から処理を行う。HTTP出力ストリーム320がContent-Lengthヘッダによるボディデータの送信かつポート番号置換をおこなうHTTP出力ストリーム1512の場合はステップ1607から処理を行う。
ステップ1607でHTTP出力ストリーム320はサーブレット321から書き込まれたデータにlocalhostかつHTTPサーバ201が動作しているポート番号のリンクを含むかをチェックする(ステップ1607)。含む場合、ステップ1608に遷移する。含まない場合ステップ1609に遷移する。ステップ1608でHTTP出力ストリーム320はポート番号をリクエストヘッダ312に保存されているHostヘッダに記載されたポート番号に置換する(ステップ1608)。ステップ1609でHTTP出力ストリーム320はデータを一時保存領域に保存し(ステップ1609)、ボディデータ書き込み処理を終了する(ステップ1606)。
HTTP出力ストリーム320がContent-Lengthヘッダによるボディデータの送信をおこなうHTTP出力ストリーム1513の場合はステップ1610から処理を行う。ステップ1610でHTTP出力ストリーム320はサーブレット321からの最初の書き込みであるかを判断する(ステップ1610)。最初の書き込みであればステップ1612に遷移する。最初の書き込みでなければステップ1611に遷移する。ステップ1612でHTTP出力ストリーム320は出力ストリーム308にレスポンスヘッダのテーブル317に保存されているContent-Lengthヘッダの情報を書き込む(ステップ1612)。そしてステップ1611に遷移する。Content-Lengthヘッダの情報はサーブレット321がレスポンスボディデータの書き込み処理を開始する前にサーブレット321によって計算されレスポンスヘッダのテーブル317保存されている。ステップ1611でHTTP出力ストリーム320はデータを出力ストリーム308に書き込み、ボディデータ書き込み処理を終了する(ステップ1606)。
図17はステップ1405のHTTP出力ストリーム320のクローズ処理の詳細なフローチャートである。サーブレット321からHTTP出力ストリーム320のクローズがおこなわれるとクローズ処理が開始される(ステップ1701)。
HTTP出力ストリーム320が1510、1511または1513のHTTP出力ストリームの場合ステップ1702から処理を行う。ステップ1702でHTTP出力ストリーム320はクローズ処理を行い(ステップ1702)、HTTP出力ストリーム320のクローズ処理を終了する(ステップ1703)。
一方HTTP出力ストリーム320がContent-Lengthヘッダによるボディデータの送信かつポート番号置換をおこなうHTTP出力ストリーム1512の場合ステップ1704から処理を行う。ステップ1704でHTTP出力ストリーム320はステップ1609でデータを一時保存した一時保存領域に保存されているデータのサイズ(データ長)を計測する(ステップ1704)。次に、ステップ1704で取得したデータのサイズをContent-Lengthヘッダの値として出力ストリーム308に書き込む(ステップ1705)。さらにHTTP出力ストリーム320はステップ1609でデータを一時保存した一時保存領域に保存されているデータを出力ストリーム308に書き込み(ステップ1705)、ステップ1702に遷移する。
以上の手順により、サーブレット321からのHTTPレスポンスデータを出力ストリームを介してHTTPサーバに引き渡すことができる。この際に、処理対象がIPP over USBのパケットであるか否かをHTTPリクエストのhostヘッダに含まれたホスト名およびポート番号に基づいて判定し、IPP over USBであると判定すれば、HTTPレスポンスデータに含まれたリンクを、仮想サーバのポート番号へと書き換える。
図13はサーブレット321が生成したボディデータがWebブラウザ204送信される時のデータの変化を示す図である。サーブレット321はレスポンスのボディデータとしてホスト名とポート番号例えばlocalhost:8000を含むデータ1301を書き込む。リクエストのHostヘッダがlocalhostかつポート番号がHTTPサーバ201が動作しているポート番号以外の番号である場合、HTTP出力ストリーム1510または1512が使用される。そのためポート番号書き換え処理(ステップ1603、1608)が実行され、HTTPサーバ201がUSB−TCP変換モジュール202に送るパケット1302に含まれるデータは、ポート番号が、HTTPリクエストのhostヘッダに書き込まれていたポート番号に置換されたデータ1303となる。
USB−TCP変換モジュール202はTCPパケット1302に含まれるデータ1303を取り出し、USBパケット1304を生成し仮想サーバ206に送信する。TCPパケット1302に含まれるデータ1303とUSBパケット1304に含まれるデータ1305は同じポート番号を含むデータである。
USBパケット1304を受信した仮想サーバ206はUSBパケット1304からデータ1305を取り出し、TCPパケット1306を生成しWebブラウザ204に送信する。USBパケット1304に含まれるデータ1305とTCPパケット1306に含まれるデータ1307とは同じポート番号を含むデータである。
TCPパケット1306を受信したWebブラウザ204はTCPパケット1306に含まれるデータ1307をリンクとして表示する。ユーザがこのリンクをクリックするとPC108の54321番ポートで動作している仮想サーバ206にリクエストが送信され、USBインターフェース経由で、MFP100で動作しているHTTPサーバ2010を利用することが可能となる。
以上のようにして、IPP over USBプロトコルを用いてホスト装置と、HTTPサーバがインストールされたUSBデバイスである画像形成装置とを接続したネットワークシステムにおいて、仮想サーバを経由することに起因して生じ得る障害を解消することができる。具体的には、ホスト装置からUSBデバイスへのデータ送信は、HTTPからUSBへのプロトコル変換を実行する、ホスト装置内の仮想サーバを経由する。そのため、HTTPリクエストのhostヘッダに含まれたホストのポート番号と、TCPの送信元ポート番号との不一致が生じ、それがHTTPサーバにおけるエラーをもたらす。そこで、HTTPリクエストの元々の送信先が仮想サーバであれば、リクエストを成功として処理することでエラーを回避する(実施形態1)。
さらに、USBデバイスによってクライアントにリダイレクトを行わせる際に、リダイレクト先がHTTPサーバであれば、HTTPサーバに代えて仮想サーバのポートを指定しておくことで、IPP over USBプロトコルを用いた仮想サーバ経由のリダイレクトが可能となる(実施形態2)。
さらに、クライアントに応答するHTTPレスポンスの実体にHTTPサーバへのリンクが含まれている場合には、HTTPサーバに代えて仮想サーバのポートを指定しておくことで、IPP over USBプロトコルを用いた仮想サーバ経由の参照が可能となる(実施形態3)。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASICによっても実現可能である。
S503 Hostヘッダのホスト名判定処理、S504 Hostヘッダのポート番号判定処理、S508クライアントのアドレスがローカルループバックアドレスであるかの判定処理

Claims (9)

  1. ハイパーテキスト転送プロトコル(HTTP)サーバーを含む画像形成装置であって、前記HTTPサーバーは、
    HTTP要求を受信する受信手段と、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しているか否かを判定する第1の判定手段と、
    前記HTTPサーバーにアクセスしたクライアントのアドレスがループバックアドレスか否かを判定する第2の判定手段と、
    処理手段とを有し、
    前記処理手段は、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していないが、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスであると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しておらず、かつ、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスではないと判定した場合に、前記HTTP要求をエラーとして処理する、
    ことを特徴とする画像形成装置。
  2. 請求項1に記載の画像形成装置であって、
    前記HTTP要求の中の前記アドレスが前記ループバックアドレスに一致し、かつ前記HTTP要求の中の前記ポート番号が前記HTTPサーバーのポート番号以外のポート番号である場合に、前記HTTP要求のホストヘッダのポート番号がリダイレクト先のポート番号としてセットされたリダイレクト先文字列を生成する手段を更に有し、
    前記処理手段は、前記リダイレクト先文字列をリダイレクト先として含むHTTP応答をする
    ことを特徴とする画像形成装置。
  3. 請求項1または2に記載の画像形成装置であって、
    前記HTTP要求の中の前記アドレスが前記ループバックアドレスに一致し、かつ前記HTTP要求の中の前記ポート番号が前記HTTPサーバーのポート番号以外のポート番号である場合に、前記処理手段は、前記HTTPサーバーにアクセスした前記クライアントへの応答データに含まれるリンク情報に含まれるポート番号を前記HTTP要求の前記ポート番号へと変換する
    ことを特徴とする画像形成装置。
  4. 請求項1乃至3のいずれか一項に記載の画像形成装置であって、
    前記処理手段はさらに、前記応答データのデータ長情報として、前記ポート番号の変換により変換されたデータ長を送信する
    ことを特徴とする画像形成装置。
  5. 請求項1乃至4のいずれか一項に記載の画像形成装置であって、
    前記HTTP要求がプロキシサーバーを介して送信された要求であるか否かを判定する第3の判定手段を更に有し、
    前記HTTP要求が前記プロキシサーバーを介して送信された要求であると判定された場合には、前記処理手段は、前記HTTP要求に応じて処理を行う
    ことを特徴とする画像形成装置。
  6. 請求項5に記載の画像形成装置であって、
    前記プロキシサーバーからUSBを介して、前記クライアントから受信したTCPパケットを前記プロキシサーバーが変換し、前記パケットの宛先を前記画像形成装置の前記HTTPサーバーへと書き換えることで形成したUSBパケットを受信した場合には、前記処理手段は、受信した前記USBパケットを前記TCPパケットに変換し、前記パケットの宛先をローカルホストのHTTPサーバーへと書き換え、該パケットを送信する
    ことを特徴とする画像形成装置。
  7. 請求項5に記載の画像形成装置であって、
    前記クライアントおよび前記画像形成装置はIPP over USBプロトコルにより互いに接続される
    ことを特徴とする画像形成装置。
  8. ハイパーテキスト転送プロトコル(HTTP)サーバーを含む画像処理装置のコンピュータを、
    HTTP要求を受信し、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しているか否かを判定し、
    前記HTTPサーバーにアクセスしたクライアントのアドレスがループバックアドレスか否かを判定し、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していないが、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスであると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しておらず、かつ、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスではないと判定した場合に、前記HTTP要求をエラーとして処理する、
    よう機能させるためのプログラム。
  9. 画像処理装置に含まれたハイパーテキスト転送プロトコル(HTTP)サーバーの制御方法であって、
    HTTP要求を受信し、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しているか否かを判定し、
    前記HTTPサーバーにアクセスしたクライアントのアドレスがループバックアドレスか否かを判定し、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致していないが、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスであると判定した場合に、前記HTTP要求に応じて処理を行い、
    前記HTTP要求の中のホスト名及びポート番号が、前記HTTPサーバーのホスト名及びポート番号にそれぞれ一致しておらず、かつ、前記HTTPサーバーにアクセスした前記クライアントのアドレスが前記ループバックアドレスではないと判定した場合に、前記HTTP要求をエラーとして処理する、
    ことを特徴とする制御方法。
JP2015126872A 2015-06-24 2015-06-24 Httpサーバとその制御方法、画像形成装置およびプログラム Active JP6521762B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015126872A JP6521762B2 (ja) 2015-06-24 2015-06-24 Httpサーバとその制御方法、画像形成装置およびプログラム
US15/180,386 US10554723B2 (en) 2015-06-24 2016-06-13 HTTP server, method for controlling the same, and image forming apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015126872A JP6521762B2 (ja) 2015-06-24 2015-06-24 Httpサーバとその制御方法、画像形成装置およびプログラム

Publications (3)

Publication Number Publication Date
JP2017010388A JP2017010388A (ja) 2017-01-12
JP2017010388A5 JP2017010388A5 (ja) 2018-08-02
JP6521762B2 true JP6521762B2 (ja) 2019-05-29

Family

ID=57603182

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015126872A Active JP6521762B2 (ja) 2015-06-24 2015-06-24 Httpサーバとその制御方法、画像形成装置およびプログラム

Country Status (2)

Country Link
US (1) US10554723B2 (ja)
JP (1) JP6521762B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3627322A4 (en) * 2017-06-14 2020-04-29 Beijing Xiaomi Mobile Software Co., Ltd. APPLICATION INTERACTION METHOD, INTERACTION METHOD AND DEVICE
JP2020095382A (ja) * 2018-12-11 2020-06-18 シチズン時計株式会社 プリンターシステム、プリンター設定方法、プリンター、プリンターの制御プログラム、プリンター設定装置およびプリンター設定装置の制御プログラム
JP7413750B2 (ja) 2019-12-16 2024-01-16 ブラザー工業株式会社 プログラム、プログラム群、および情報処理装置
JP2024016354A (ja) * 2022-07-26 2024-02-07 キヤノン株式会社 Webブラウジングシステム、通信端末、画像生成サーバ

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4139541B2 (ja) * 2000-01-24 2008-08-27 セイコーエプソン株式会社 プリンタおよびプリンタジョブデータの転送方法
US6918041B1 (en) * 2000-02-23 2005-07-12 Microsoft Corporation System and method of network communication with client-forced authentication
JP3526435B2 (ja) * 2000-06-08 2004-05-17 株式会社東芝 ネットワークシステム
JP3876737B2 (ja) * 2002-03-18 2007-02-07 松下電器産業株式会社 Ddnsサーバとddnsクライアント端末、及びddnsシステム
JP2003271553A (ja) * 2002-03-18 2003-09-26 Matsushita Electric Ind Co Ltd ウェブサーバ端末とそのネットワークシステム、及びそのアクセス制御方法
WO2003079642A2 (en) * 2002-03-18 2003-09-25 Matsushita Electric Industrial Co., Ltd. A ddns server, a ddns client terminal and a ddns system, and a web server terminal, its network system and an access control method
JP2005031725A (ja) 2003-07-07 2005-02-03 Matsushita Electric Ind Co Ltd サーバ及び中継装置
US20080304486A1 (en) * 2007-06-08 2008-12-11 Joshua Verweyst Graessley Multiplexed data stream protocol
JP5289041B2 (ja) * 2008-12-26 2013-09-11 キヤノン株式会社 データ処理装置、データ処理方法、及びコンピュータプログラム
JP2011191888A (ja) * 2010-03-12 2011-09-29 Canon Inc 画像形成装置、制御方法、及びプログラム
US9246699B2 (en) * 2010-06-07 2016-01-26 Salesforce.Com, Inc. Method and system for testing multiple components of a multi-tenant, multi-domain, multi-tiered website
US20130204988A1 (en) * 2011-07-27 2013-08-08 Mobidia Technology, Inc. Method and system for loopback proxy
JP2014002716A (ja) * 2012-05-24 2014-01-09 Buffalo Inc 情報処理装置、ネットワークシステム、データ共有方法、および、データ共有を可能とするコンピュータプログラム
JP6075010B2 (ja) * 2012-10-31 2017-02-08 ブラザー工業株式会社 通信中継プログラム、及び、画像処理装置
JP6015360B2 (ja) * 2012-11-02 2016-10-26 ブラザー工業株式会社 通信装置および通信プログラム
JP6011266B2 (ja) * 2012-11-19 2016-10-19 ブラザー工業株式会社 通信中継プログラム、通信中継方法、情報処理装置及び画像処理装置
WO2015160953A2 (en) * 2014-04-16 2015-10-22 Pixia Corp. Method and system of transmitting data over a network using a communication protocol
US9516107B2 (en) * 2014-06-05 2016-12-06 Dropbox, Inc. Secure local server for synchronized online content management system

Also Published As

Publication number Publication date
US10554723B2 (en) 2020-02-04
US20160381115A1 (en) 2016-12-29
JP2017010388A (ja) 2017-01-12

Similar Documents

Publication Publication Date Title
CN109067914B (zh) Web服务的代理方法、装置、设备及存储介质
US7930365B2 (en) Method and apparatus to modify network identifiers at data servers
US8335858B2 (en) Transparent auto-discovery of network devices logically located between a client and server
CN111294399B (zh) 一种数据传输方法和装置
US20170034174A1 (en) Method for providing access to a web server
US11196833B1 (en) Proxy server synchronizer
JP6521762B2 (ja) Httpサーバとその制御方法、画像形成装置およびプログラム
US8949952B2 (en) Multi-stack subscriber sign on
US10367894B2 (en) Information processing apparatus, method for controlling the same, non-transitory computer-readable storage medium, and information processing system
WO2016101591A1 (zh) 一种报文响应方法及装置
WO2011149486A1 (en) System and method for continuation of a web session
CN113630439B (zh) 实时通信rtc连接方法、服务器及存储介质
JP2017500679A (ja) メディアリソースフィードバック方法、装置、プログラム及び記録媒体
JP2002141954A (ja) 通信中継装置、および通信中継方法、並びにプログラム記憶媒体
US8646066B2 (en) Security protocol control apparatus and security protocol control method
US11038994B2 (en) Technique for transport protocol selection and setup of a connection between a client and a server
JP5638063B2 (ja) 通信装置、通信装置の制御方法、プログラム
US7546339B2 (en) Client-server apparatus and method using alternative-response protocols
JP2005258632A (ja) ネットワークストレージ装置の導通確認方法およびホスト計算機
WO2021082945A1 (zh) 一种远程管理方法、系统、终端设备及服务器
US20200106515A1 (en) Communication Device, Relay Device, Information Processing System, Communication System and Communication Method
CN112118284A (zh) 一种面向网关设备的http数据请求方法、设备及介质
US9497273B2 (en) Method and device for pairing a terminal and a user account
US11811734B2 (en) Protocol switching for connections to zero-trust proxy
JP2019103118A (ja) 通信中継装置、通信中継プログラム、および通信中継方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180622

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180622

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190319

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190326

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190423

R151 Written notification of patent or utility model registration

Ref document number: 6521762

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151