|
Abstract
SHIORI is the most important component of a ghost. This module almost always determines the personality of a ghost.
home
+-ghost
+-naru
+-ghost
+-master
+-shiori.dll
SHIORI/2.0
SHIORI/2.0 specification is an approach to give high availability to SHIORI specification itself. Most important fact is that a requested data is given with the request header, and it is not discriminated by called function. Actually, SHIORI/2.0 DLL SHOULD export only three functions, "load", "unload", and "request", at all. This means that SHIORI.dll is deeply abstracted, and finally, SHIORI.DLL is not necessary to be dynamic link library, intrinsically.
All argument and return values are transferred through globalmemory segment. You should get a data using the function "gmem_fixed". Next, you should release the window handle, and extract the essential data using the length value of the data given with "len" entry. After you made the return value of data, you should put the valid value of length of return data into "len" entry again. Finally, you should return all data using the function "gmem_fixed".
Definition of the function "request" is as follows;
extern "C" __declspec(dllexport) HGLOBAL __cdecl request(HGLOBAL h, long *len);
function request(h: hglobal; var len: longint): boolean; cdecl; export;
All requests are handled with the function "request" only. You must export only three functions, "load", and "unload", "request", according to SHIORI/2.0 spec. You must implement the SHIORI server to change the data handling and its outputs, depending on the given data, NOT on the called function name.
Request header is alike to HTTP, or SSTP header. The whole header is separated to several entries with Carriage return(CR:0x0d) + line feed(LF:0x0a) code. The first entry is a command and version number of SHIORI.dll. The second entry and after are optional entries that you can choice its number as you need to use it. Finally, the header is terminated by CR+LF codes twice.
Headers including SSTP spec, i.e., Sender, Charset, have equal features that are used in SSTP. Thus, details of there features are omitted in here.
Please refer to the SSTP specifications at first.
Header definition
- NOTIFY
NOTIFY OwnerGhostName SHIORI/2.0
Sender: Nobody
Ghost: Sakura
Charset: Shift_JIS
NOTIFY is the client's request header that is given to the server as one-way information.
- Ghost - the name of the ghost that is running on the client now.
NOTIFY is called by the client whenever the status of the client changes. The server must return its own status code only, because "NOTIFY" requests nothing at all to the server.
- GET Version
GET Version SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS
SHIORI/2.0 200 OK
Version: SHIORI/2.0
"Get Version" request is sent by a client to get the version information of SHIORI.dll from the server.
- GET Sentence
GET Sentence SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS
Word: Card Capture
Sentence: \h\s0Good Morning!\e
SHIORI/2.0 200 OK
Sentence: \h\s0Just between YOU and ME, Wednesday is Tsukuri-Monoji's secret xxx.\u\s0....\w8\w8Hmmm....\e
"GET Sentence" request is sent by a client to get the script from the server.
- Word - Words that should be interpreted.
- Sentence - Sentences that should be interpreted.
If "GET Sentence" request has neither "Word" header nor "Sentence" header, it means that "talk as you like it". If "Get Sentence" request has a "Word" header, it means that "talk a topic related to the given word". If "Get Sentence" request has a "Sentence" header, it means that "be spoken to by another ghost".
An example of similar features of SHIORI/2.0 header versus SHIORI/1.1 function categorized into "get" functions are as follows.
| 2.0 | 1.1 |
| n/a | getaistringrandom |
| Word | getaistringfromtargetword |
| Sentence | getresponse |
In examples above, "Word", and "Sentence" header is shown at once. But you SHOULD NOT use those request in this way, because of that the activity of SHIORI.dll will fall down into unstable conditions. You MUST use ONE of those requests, if you wish to make them effectively.
The request with "Sentence" header requires extremely difficult handling. It is equal to be spoken to by another ghost that has different personality. Thus, you MUST interpret the given sentence, and understand its contents and/or tones, feelings, etc. And your ghost MUST return "correct" answer for the given sentence, NOT on your own way. Furthermore, SHORI.dll MUST remove tags of Sakura Script itself, if necessary, because of that Sentence header may include fragments of Sakura Script, not only common sentences.
- GET Word
GET Word SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS
Sentence: \h\s0Describe about the relationship between Sakura and Card Captor not more than 400 words.\e
SHIORI/2.0 200 OK
Word: Sakura
"GET Word" request is sent by the client to get a word or a fragment of Sakura Script from the server.
- Type - Type of the word (the part of speech) to get.
- Sentence - The sentence to interpret.
Strings probably to be given to Type header are categorized as follows.
| |
| %ms | Noun - someone's name |
| %mz | Noun - Inorganic substance |
| %ml | Noun - collectives |
| %mc | Noun - company name |
| %mh | Noun - shop name |
| %mt | Noun - skills, techniques, etc.(especially "Waza" , for example, "Judo-Chop") |
| %me | Noun - food |
| %mp | Noun - place name |
| %m? | Noun - unlimited |
| %dms | Noun - Long noun which connects two or more parts of speech. Like "AA by which BB to CC" |
"Get Word" request with "Type" header means to "give a word specified with noun tab".
"Get Word" request with "Sentence" header means to "extract a word from given sentence".
An example of similar features of SHIORI/2.0 header versus SHIORI/1.1 function categorized into "get" functions are as follows.
| 2.0 | 1.1 |
| Type | getword |
| Sentence | getmatchword |
In examples above, "Type", and "Sentence" header is shown at once. But you SHOULD NOT use those request in this way, because of that the activity of SHIORI.dll will fall down into unstable conditions. You MUST use ONE of those requests, if you wish to make them effectively.
SHIORI/2.0 request with "Sentence" header probably receives two or more words from server. Thus, client MUST returns special value as follows.
200 OK SHIORI/2.0
Word: Sakura[1]\ms[2]Card Captor[1]\ml[2]
One block consists of a word and its tab of noun category. Each block are separated by byte-character [2] (0x02), the word and its tab are separated by byte-character [1] (0x01). You MUST cautious with differences of separators from SHIORI/1.1 spec.
And, it is probable that no hitting word returns to given sentences. In this case, you MUST return status code "204 No Content".
- GET Status
GET Status SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS
SHIORI/2.0 200 OK
Status: 0,0,0,0,0,0
"GET Status" request is sent by the client to get the status code from the server.
neuron,neuronm,neuronk,neurond,neurone,sysnapse
- Status codes
Status code that must be returned by server is as follows.
| 2xx - data handling completed |
| |
| 200 OK | normal end |
| 204 No Content | normal end. but, no returned data |
| |
| 3xx - data handling completed, and request more data or actions to client |
| |
| 310 Communicate | exit with no errors. Send the answer to the server or to the directed window. |
| |
| 4xx - request error |
| |
| 400 Bad Request | Invalid Request content |
| |
| 5xx - Server error |
| |
| 500 Internal Server Error | Internal Server Error has occurred. |
- Response data
If the request needs to return any data from server, server must send back the required header following to the 2xx status code. If server returns a word, the required header is "Word", or it returns a sentence, the required header is "Sentence". And you must be attentive that some request needs its own header.
For example;
GET Sentence SHIORI/2.0
Sender: Sakura
Charset: Shift_JIS
SHIORI/2.0 200 OK
Sentence: \h\s0Just between YOU and ME, Wednesday is Tsukuri-Monoji's secret xxx.\u\s0....\w8\w8Hmmm....\e
SHIORI/2.1
CAUTION: This specification will be abolished in a few days. If you want to use these features on your ghost, you SHOULD follow the specification of SHIORI/2.2 or later. Please refer to these specifications described in next section or after. Thank you.
SHIORI/2.1 specification is an approach to realize talking between ghosts (SHORI.DLLs).
- 310 Communicate
The talking between ghosts starts with returning "310 Communicate" status code.
SHIORI/2.1 310 Communicate
Sender: Sakura
TargetHWnd: 1024
Age: 0
Sentence: \h\s0....\w8\w8Don't be elated over introducing to "Mado-no Mori".\e
If the SHIORI server returns the status code "310 Communicate" substitute for "200 OK", moreover the header entries of returning data includes both "TargetHWnd " and "Age" header correctively, SHIORI client sends the data of "Sentence" entry to another SHIORI client which is shown by "TargetHWnd" entry using to Direct SSTP COMMUNICATE/1.2 spec, in addition to speak that's lines normally.
Header definition
- COMMUNICATE Sentence
The SHIORI client which receives Direct SSTP sends request to SHIORI server with the "COMMUNICATE" header, not with the "GET" header.
COMMUNICATE Sentence SHIORI/2.1
Sender: Sakura
Age: 0
Charset: Shift_JIS
Sentence: \h\s0Good Morning!\e
The request with "COMMUNICATE Sentence" header is usually equal to that with "GET Sentence", but two differences from usually occasions exists in SHIORI/2.1 spec. The first, "Age" header exists in this request, and the second, the entry of "Sender" is NOT reserved name "Nobody", but the ghost's own name.
If the SHIORI server reply to this request with "310 Communicate" status code again(also without "TargetHWnd" entry) , the target SHIORI client receive the "Sentence" header with same mannar above, because of that the ghost give answer to another ghost spoken to.
You MUST increment the counter, "Age" header entry, whenever SHIORI.dll of your ghost replies to the request with "310 COMMUNICATE" status code.
If you reply to the "COMMUNICATE Sentence" request with the status code "200 OK", talking between ghosts are stopped at this point.
SHIORI/2.2
SHIORI/2.2 specification is the requests to send generic events to SHIORI.dll. The events are sent according to SSTP NOTIFY/1.0 and/or SAKURA API/1.3 specs.
This document instructs how to interpret events given by ghosts depending on SHIORI/2.2 spec. If you want to send events, you must refer to SSTP NOTIFY/1.0 and SAKURA API/1.3 specs.
Get Sentence SHIORI/2.2
Sender: Nobody
Event: OnDisplayChange
Reference0: 32
Reference1: 1280
Reference2: 1024
Charset: Shift_JIS
The event identifiers are handled by "Event" header entry. The major clients that define their original events are as follows. The definition and/or implementation of event identifiers and its reference information are allowed to be freely made by client developers, respectively. Thus, you must follow the developers' specifications and/or reference documents, if you want to use third party's SHIORI module efficiently on your ghost.
Event identifier definitions
Basics

|
| Basic events |
| |
| OnFirstBoot | boot the ghost at the first time |
| OnWindowStateMinimize | iconfied |
| OnWindowStateRestore | restore from iconfied condition |
| OnBoot | boot up successfully |
| OnClose | direct to exit
CAUTION: This event may be useless in some cases, because of that SHIORI module is allowed to ignore this event. |
| OnTeachStart | Teach dialog was opened |
| |
| changing events |
| |
| OnGhostChanging | direct to change into another ghost
- Reference0 - Next ghost name
- Reference1 - changing method
- manual - changing manualy
- automatic - changing automatic(system etc.)
|
| OnGhostChanged | become the ghost itself as a consequence of direction
- Reference0 - Previous ghost name
|
| OnSurfaceSetChanging | direct to change the surface set |
| OnSurfaceSetChanged | completed to change into another surface set |
| OnShellChanging | direct to change into another shell |
| OnShellChanged | completed to change into another shell |
| |
| Time events |
| |
| OnSecondChange | timers counter incremented in "second" |
| OnMinuteChange | timers counter incremented in "minute" |
| (References) |
- Reference0 - total time of continuous running with this ghost
(measuring unit: hour)
- Reference1 - the flag of the position of the ghost
(boolean; If a part of the surface overlaps on the edge of display, set this value into "true" (=1), otherwise into "false"(=0).)
- Reference2 : the flag of the surface position of main character between that of sub character.
(boolean: If a part of surfaces overlaps on each other, set this value into "true" (=1), otherwise into "false" (=0).)
|
| |
| Surface events |
| |
| OnSurfaceChange | completed to change into another surface |
| OnSurfaceRestore | just come into the timing that restores the first surface standing in the surface now.(The assigned number of first surface is different in case by case. The occasion of first ghost, the assigned number of Sakura is 0, that's of Unyu is 10.)
CAUTION: This event ONLY notify the timing to switch the surface into the first. SHIORI module is allowed to do this or not.
|
| (References) |
- Reference0 - the surface number of the main character that is displaying now.
- Reference1 - the surface number of the sub character that is displaying now.
|
| |
| Mouse events |
| |
| OnMouseMove | The mouse is moved. |
| OnMouseClick | The left button of mouse is clicked. |
| OnMouseDoubleClick | The left button of mouse is clicked double. |
| OnMouseWheel | The mouse wheel is scrolled. |
| (References) |
- Reference0 - The value of x-axis of the mouse cursor (local coordinate)
- Reference1 - The value of y-axis of the mouse cursor (local coordinate)
- Reference2 - The quantity of rotate of the mouse wheel and the direction of that's
- Reference3 - The owner of the event (0 : Sakura / 1 : Kero)
- Reference4 - touch judgement identifier.
The touch judgement identifier is free defined by shell. However, Head, Face and Bust is standard identifier. So, that is supported by many shells.
|
| |
| Install events |
| |
| OnInstallBegin | begin install sequence |
| OnInstallComplete | install sequence is completed successfully |
| OnInstallFailure | install sequence is failed with some errors |
| OnInstallRefuse | install sequence is refused because of that the file name to install indicates another ghost name |
| (References) |
- Reference0
- Complete - the identifier of installed objects
- Failure - the reason of failure
- Refuse - indicated ghost name
- Reference1 - Complete : the name of installed objects
Identifier of installed objects
shell/ghost/balloon/plugin/ghost with balloon/shell with balloon
|
| |
| File events |
| |
| OnFileDropping | drug and drop the file now. |
| OnFileDropped | drug and drop the file is completed |
| OnDirectoryDrop | drug and drop the directory |
| OnWallpaperChange | change the wallpaper(because of drug and drop the images) |
| (References) |
- Reference0 - the file name or the directory name (full-path)
|
| |
| BIFF events |
| |
| OnBIFFBegin | begin checking up the mailbox |
| OnBIFFComplete | checking up the mailbox is completed successfully |
| OnBIFFFailure | checking up the mailbox is failed |
| (References) |
- Reference0
- Complete - quantity of spooled mails
- Failure - the reason of failure
- Reference1
- Complete - total file size of spooled mails
The reason of success or failure
- timeout - connection request timed out
- kick - permission denied by mail server
- defect - some mistakes of user settings exists
|
| |
| Update events |
| |
| OnUpdateBegin | begin to update modules through the network |
| OnUpdateComplete | network update is completed successfully |
| OnUpdateFailure | network update is failed |
| OnUpdate.OnDownloadBegin | begin to download the updated files |
| OnUpdate.OnMD5CompareBegin | begin to compare the MD5 checksum |
| OnUpdate.OnMD5CompareComplete | match the MD5 checksum |
| OnUpdate.OnMD5CompareFailure | mismatch the MD5 checksum |
| (References) |
- Reference0
- OnUpdate - the reason of success or failure
- OnDownload - the file name of downloading
- OnMD5 - the file name to compare with
- Reference1
- OnUpdate - file name list(separated by comma(,))
- OnMD5 - the valid MD5 checksum
- Reference2
- OnMD5 - the MD5 checksum of the downloaded file
The reason of success or failure
- none - no files to update
- changed - files is updated
- timeout - connection request time out
- md5 miss - mismatch of the MD5 checksum
- 404 etc. - failed with those status codes
|
| |
| SNTP events |
| |
| OnSNTPBegin | begin to adjust the internal clock |
| OnSNTPCompare | begin to compare time of local host's internal clock with NTP/SNTP server's clock |
| OnSNTPCorrect | adjust time of the local host's internal clock to NTP/SNTP server's |
| OnSNTPFailure | fail to adjust the clock |
| (References) |
- Reference0 - the host name of NTP/SNTP server or its IP address (with port number: 123, if necessary)
- Reference1 - the correct time of NTP/SNTP server separated with byte character [1] (0x01).
year,month,day,hour,minute,second
- Reference2 - the present time of local host (NTP/SNTP client) separated with byte character [1] (0x01).
year,month,day,hour,minute,second
- Reference3 - time lag between the local host and the NTP/SNTP server(measuring unit: second)
|
| |
| head line sense enevts |
| |
| OnHeadlinesenseBegin | begin to head line senses |
| OnHeadlinesense.OnFind | The reading head line sense result is directed. |
| (References) |
- Reference0 - site name for sense
- Reference1 - URL for sense
- Reference2 - OnFind phase
- Reference3 - head line main body(parts of sakura script)
Reference2 and Reference3 is used only at Onfind. OnFind phase have following types:
- First - First page
- First and Last - First and Last page(one page only)
- Last - Last page
- Next - Other of either
At OnFind event, if use choice without identifier. That have mean of mark for next page. For example:
\q0[][Next page]
|
| OnHeadlinesenseComplete | The head line senses is completed successfully. |
| OnHeadlinesenseFailure | The head line senses is failed. |
| (References) |
In the current state, Success of head line sense have mean of begin to read of head line. Therefore, OnHeadlinesenseComplete have mean of sense completed but no update.
Reasons
- no update - no update
- can't download - can't download
- can't analyze - downloaded file don't have valid headline.
|
| |
| Play sound events |
| |
| OnMusicPlay | begin playing the music.
- Reference0 - the title of music (probably with additional information, i.e.; Artist's name, playing time, etc)
|
| |
| Choices event |
| |
| OnChoiceSelect | select from the choices. |
| OnChoiceTimeout | Request Timeout. |
| (References) |
- Reference0
- Select - the identifier of the selected choice
- Timeout - the script that was time out
|
| |
| Exception event |
| |
| OnSSTPBreak | the process is broken following SSTP spec.
- Reference0 - script that cause to the exception error
|
| |
| Uncategorized events |
| |
| OnNetworkHeavy | return no response from the server, return no data from server, the server is IP unreachable, etc. |
| OnDisplayChange | change the display resolution and/or color depth
- Reference0 - the color depth after change (bpp)
- Reference1 - the display resolution after change (width)
- Reference2 - the display resolution after change (height)
|
| OnSSTPBlacklisting | direct to put the client on the blacklist finally
- Reference0 - the IP address of the client that is put on the blacklist.
|
| |
"Kinoko" event

|
"Neko-dorifu" event

|
The maximum entries of "Reference" are eight on SHIORI/2.2 spec.(Reference0 to 7)
You can ignore any events. If you want to do so, return the status code "204 No Content" to the client's request.
SHIORI/2.3
The SHIORI/2.3 specification is an approach to realize talking between some SHIORI modules (ghosts).
- CAUTION -
The SHIORI/2.3 spec is more abstracted and higher platform independent AI specification based on the SHIORI/2.1 spec. The SHIORI/2.1 spec that is the older version of AI spec, should delete from the specifications of the SHIORI module in a few days, because of the meaning of the existence of the SHIORI/2.3 spec is completely equal to the SHIORI/2.1 spec.
The differences from the SHIORI/2.1 spec are as follows.
- The SHIORI module can not sense another ghost who is on the same environment now. The existence of another ghost who is on there is checked by receiving the "NOTIFY OtherGhostName" request.
- The "Hwnd" header is abolished.
- The "COMMUNICATE Sentence" header is abolished.
- The "310 Communicate" status code is abolished. The ghost determines another ghost's name with "To" header entry, to talk to that. If the request hasn't any "To" header entry, or the ghost's name clarified by "To" header entry is incorrect, it will not talk to anyone else.
However, the SHIORI module according to SHIORI/2.3 spec works by halves now as follows, because of keeping the upper-compatibility to SHIORI/2.1 specs.
- If there is no "To" header entry, SHIORI module will also read the "HWnd" header entry.
- It sends the request with "COMMUNICATE Sentence" header.
* The "310 Communicate" status code is interpreted in the same way of the "200 OK" status code.
This is the limited spec to work correctly the SHIORI/2.1 server that is now on going. You MUST implement your SHIORI module with the SHIORI/2.3 spec instead of SHIORI/2.1 spec. And you MUST NOT use the SHIORI/2.1 spec to implement your new SHIORI module.
Header definition
- Notify
The SHIORI client sends the "NOTIFY" request to the SHIORI server indeterminately.
NOTIFY OwnerGhostName SHIORI/2.3
Sender: Nobody
Ghost: Sakura
Charset: Shift_JIS
The SHIORI client tells its own ghost's name information to the SHIORI server with the "N0TIFY OwnerGhostName" request. This information is told when the ghost is wake up, or switched to another ghost.
NOTIFY OtherGhostName SHIORI/2.3
Sender: Nobody
Ghost: Naru
Ghost: Mayura
....
..
Charset: Shift_JIS
The "NOTIFY OtherGhostName" request tells the number of ghosts except itself, which are running now and can be communicated with. The numbers of "Ghost" header entry are equal to that of ghosts actually exist. If the ghost is running alone, this request doesn't have any "Ghost" header.
The SHIORI module can decide to talk to whom, according to this information.
- To
Your ghost can talk to the target ghost (The SHIORI module of that ghost) whose name is designated as the "To" header entry.
The name of target ghost is designated as the "To" header entry,
SHIORI/2.3 200 OK
Sender: Sakura
To: Naru
Age: 0
Sentence: \h\s0....\w8\w8Don't be elated over introducing to "Mado-no Mori".\e
Charset: Shift_JIS
If you designate the "To" header and the "Age" header correctly, SHIORI client speaks normally, and send the data of "Sentence" header entry with "COMMUNICATE/1.2" request of Direct SSTP spec, to another SHIORI client indicated by the "To" header entries.
- GET Sentence
The SHIORI client that receive the Direct SSTP packets, send "GET Sentence" request.
GET Sentence SHIORI/2.3
Sender: Sakura
Age: 0
Sentence: \h\s0....\w8\w8I think so, but.....\e
Charset: Shift_JIS
This type of "GET sentence" request have two differences from "GET Sentence" request normally. The first, the request header has the "Age" header entry. The second, "Sender" header entry data is not "Nobody" but is the ghost's name to talk to, because of your ghost talk to another SHIORI (ghost).
If you want to answer to this request, you should send the response data with "To" header entry which data is the target ghost name received from that with "Sender" header entry. The answer tells through the same return path to the SHIORI module of the target ghost.
If you want to response only, but return no answer, you must omit the "To" header entry.
If you want to reply, you MUST increment the "Age" header entry of your SHIORI module's request header.
SHIORI/2.4
The SHIORI/2.4 is the request to teach something to the ghost (SHIORI).
- TEACH/311 Not Enough/200 OK
TEACH SHIORI/2.4
Word: Gut's Ishimatsu
First, the client send "TEACH" request to the server.
SHIORI/2.4 311 Not Enough
Sentence: \h\s0What's Gut's Ishimatsu?\e
In many cases, the information is too little enough to teach the ghost using a word itself. Therefore, SHIORI requests to input additional information with returning the "311 Not Enough" status code.
The client set the additional information to the "Reference" header entry, and send "TEACH" request to the server again.
TEACH SHIORI/2.4
Word: Gut's Ishimatsu
Reference0: the person's name
SHIORI/2.4 311 Not Enough
Sentence: \h\s0Teach me more related words! \e
TEACH SHIORI/2.4
Word: Gut's Ishimatsu
Reference0: the person's name
Reference1: dangerous
SHIORI/2.4 311 Not Enough
Sentence: \h\s0Much more? \e
The SHIORI server repeats these procedures until the required information are completed. The server returns status code "311 Not Enough" until the required information are completed, navigating with the questionnaire data of "Sentence" header entry. Finally, server returns "200 OK" status code when teaching is successfully completed.
The ordinal of "Reference" header is incremented whenever receiving the "311 Not Enough" status code. There is no upper limit of the ordinals.
SHIORI/2.4 200 OK
Sentence: \h\s0I'm a little cleverer! \e
- 312 Advice
"312 Advice" status code is used to navigate to study words with keeping under present condition, when input the uninterpretable information.
SHIORI/2.4 311 Not Enough
Sentence: \h\s0What's Gut's Ishimatsu?\e
At this time, let the server returns the uninterpretable sentence to the clients as following example.
TEACH SHIORI/2.4
Word: Gut's Ishimatsu
Reference0: yabaimono
SHIORI/2.4 312 Advice
Sentence: \h\s0....\w8\w8....?\e
In this way, the present data of Reference0 is removed from stuck, and can get the next data into the Reference0 header entry.
The latest "Reference" header entry is removed from stuck by the "312 Advice" status code. When SHIORI returns the 312 status code to uninterpretable Reference1 entry, only data of Reference1 entry is abolished. The already fixed data of Reference0 entry is not changed, and sent the same data as last time.
As above, SHIORI module can reject the uninterpretable data.
SHIORI/2.5
The "SHIORI/2.5" is the request to get the simple string resource data.
GET String SHIORI/2.5
ID: homeurl
Chrset: Shift_JIS
SHIORI/2.5 200 OK
String: http://sakura.mikage.to/
SHIORI returns the valid strings according to the identifier conducted with the ID header entry.
Defined ID header and its entries are as follows.
ID header
|