--- a/Symbian3/PDK/Source/GUID-6998404B-CC51-5337-B04F-8444C32B99C9.dita Thu Mar 11 15:24:26 2010 +0000
+++ b/Symbian3/PDK/Source/GUID-6998404B-CC51-5337-B04F-8444C32B99C9.dita Thu Mar 11 18:02:22 2010 +0000
@@ -1,87 +1,87 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
-<!-- This component and the accompanying materials are made available under the terms of the License
-"Eclipse Public License v1.0" which accompanies this distribution,
-and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
-<!-- Initial Contributors:
- Nokia Corporation - initial contribution.
-Contributors:
--->
-<!DOCTYPE task
- PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd">
-<task id="GUID-6998404B-CC51-5337-B04F-8444C32B99C9" xml:lang="en"><title> Writing
-an Inbound Hook Tutorial</title><shortdesc>This topic describes how to write an inbound hook. </shortdesc><prolog><metadata><keywords/></metadata></prolog><taskbody>
-<steps id="GUID-538FFCBC-31FB-5B6A-B997-E38B68C54123">
-<step id="GUID-6170D075-3962-59EA-BD58-28933D6214B9"><cmd>The <xref href="GUID-1A52EC87-DAD1-32C8-B530-295A65EB7292.dita"><apiname>CIp6Hook()</apiname></xref> is
-a base class for all hook protocols. For more information, see the <xref href="GUID-3490B79F-7D03-3071-864E-D9C7107608DE.dita"><apiname>MIp6Hook()</apiname></xref> and <xref href="GUID-9A313A0F-FCEE-3C3E-808F-DE46FB577BD7.dita"><apiname>CProtocolBaseUnbind()</apiname></xref> classes. </cmd>
-</step>
-<step id="GUID-EACF710B-9FAB-511E-B3B9-45A33E553267"><cmd/>
-<info>The <xref href="GUID-10F2F06B-003E-3F29-AE09-6A85D3682729.dita"><apiname>ApplyL()</apiname></xref> function is derived from the <codeph>CIp6Hook()</codeph> class
-to create an inbound hook. The following are the parameters of an <codeph>ApplyL()</codeph> function: </info>
-<choicetable id="GUID-37EC06D0-A557-4B55-B09E-33BD4B59DD7D" keycol="1">
-<chrow>
-<choption><p>aPacket</p></choption>
-<chdesc><p>Packet to process</p></chdesc>
-</chrow>
-<chrow>
-<choption><p>aInfo</p></choption>
-<chdesc><p>Packet information </p></chdesc>
-</chrow>
-</choicetable>
-<info> Note: The <codeph>ApplyL()</codeph> function is not used for post
-or pre-processing hooks. </info>
-</step>
-</steps>
-<example><title>How to write an Inbound Hook example </title> <p>The following
-is an example code for how to write an inbound hook: </p> <codeblock id="GUID-9EB3E680-7CAE-5EE3-8B15-8FF06E3294CA" xml:space="preserve">
-CHookExample::ApplyL(RMBufHookPacket &aPacket, RMBufRecvInfo &aInfo)
- {
- if (aInfo.iProtocol != iProtocol)
- // Normally, it should never get here in this example. But,
- // if the prototocol was just changed via SetOption...
- return KIp6Hook_PASS;
- TInet6Packet<TExtensionHeader> ext(aPacket, aInfo.iOffset);
- if (ext.iHdr == NULL)
- return KIp6Hook_PASS; // Bad packet? But let someone else worry about it.
- if (ext.iHdr->Port() != iPort)
- return KIp6Hook_PASS; // Not for me, let someone else handle it.
-
- const TInt hdrlen = aInfo.CheckL(ext.iHdr->HeaderLength());
- if (aInfo.iIcmp)
- {
- // Header is in returned packet of an ICMP Error
- const TInt offset = aInfo.iOffset - aInfo.iOffsetIp;// Relative offset within problem packet
- if (aInfo.iIcmp == KProtocolInet6Icmp && // only ICMP6 can be tested like this
- aInfo.iType == KInet6ICMP_ParameterProblem &&// A parameter problem...
- offset <= (TInt)aInfo.iParameter && // after start of this header?
- offset + hdrlen > (TInt)aInfo.iParameter)// and before end of this header?
- {
- // Someone didn't accept my strange header.
- // Could set some flag and stop sending it.
- aPacket.Free();
- return -1;
- }
- // Error is not about my header, fall to DONE
- }
- else
- {
- // Implement header semantics
- // (none in this example).
- }
- // Header processed (Done), skip over
- // - need to indicate the location of "my next header" field,
- aInfo.iPrevNextHdr = (TUint16)(aInfo.iOffset+1);
- // - need to make the protocol of the following header available
- aInfo.iProtocol = ext.iHdr->NextHeader();
- // - and finally, update the offset over my header.
- aInfo.iOffset += hdrlen;
- return KIp6Hook_DONE;
- }
-
-</codeblock> </example>
-</taskbody><related-links>
-<link href="GUID-340C57A4-B799-502D-8B86-39955E2F4268.dita"><linktext>Creating
-an ESK File</linktext></link>
-<link href="GUID-88AB6957-6D2B-5668-8CC3-4E426E68C9B7.dita"><linktext>Writing an
-Outflow Hook</linktext></link>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
+<!-- This component and the accompanying materials are made available under the terms of the License
+"Eclipse Public License v1.0" which accompanies this distribution,
+and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
+<!-- Initial Contributors:
+ Nokia Corporation - initial contribution.
+Contributors:
+-->
+<!DOCTYPE task
+ PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd">
+<task id="GUID-6998404B-CC51-5337-B04F-8444C32B99C9" xml:lang="en"><title> Writing
+an Inbound Hook Tutorial</title><shortdesc>This topic describes how to write an inbound hook. </shortdesc><prolog><metadata><keywords/></metadata></prolog><taskbody>
+<steps id="GUID-538FFCBC-31FB-5B6A-B997-E38B68C54123">
+<step id="GUID-6170D075-3962-59EA-BD58-28933D6214B9"><cmd>The <xref href="GUID-1A52EC87-DAD1-32C8-B530-295A65EB7292.dita"><apiname>CIp6Hook()</apiname></xref> is
+a base class for all hook protocols. For more information, see the <xref href="GUID-3490B79F-7D03-3071-864E-D9C7107608DE.dita"><apiname>MIp6Hook()</apiname></xref> and <xref href="GUID-9A313A0F-FCEE-3C3E-808F-DE46FB577BD7.dita"><apiname>CProtocolBaseUnbind()</apiname></xref> classes. </cmd>
+</step>
+<step id="GUID-EACF710B-9FAB-511E-B3B9-45A33E553267"><cmd/>
+<info>The <xref href="GUID-10F2F06B-003E-3F29-AE09-6A85D3682729.dita"><apiname>ApplyL()</apiname></xref> function is derived from the <codeph>CIp6Hook()</codeph> class
+to create an inbound hook. The following are the parameters of an <codeph>ApplyL()</codeph> function: </info>
+<choicetable id="GUID-37EC06D0-A557-4B55-B09E-33BD4B59DD7D" keycol="1">
+<chrow>
+<choption><p>aPacket</p></choption>
+<chdesc><p>Packet to process</p></chdesc>
+</chrow>
+<chrow>
+<choption><p>aInfo</p></choption>
+<chdesc><p>Packet information </p></chdesc>
+</chrow>
+</choicetable>
+<info> Note: The <codeph>ApplyL()</codeph> function is not used for post
+or pre-processing hooks. </info>
+</step>
+</steps>
+<example><title>How to write an Inbound Hook example </title> <p>The following
+is an example code for how to write an inbound hook: </p> <codeblock id="GUID-9EB3E680-7CAE-5EE3-8B15-8FF06E3294CA" xml:space="preserve">
+CHookExample::ApplyL(RMBufHookPacket &aPacket, RMBufRecvInfo &aInfo)
+ {
+ if (aInfo.iProtocol != iProtocol)
+ // Normally, it should never get here in this example. But,
+ // if the prototocol was just changed via SetOption...
+ return KIp6Hook_PASS;
+ TInet6Packet<TExtensionHeader> ext(aPacket, aInfo.iOffset);
+ if (ext.iHdr == NULL)
+ return KIp6Hook_PASS; // Bad packet? But let someone else worry about it.
+ if (ext.iHdr->Port() != iPort)
+ return KIp6Hook_PASS; // Not for me, let someone else handle it.
+
+ const TInt hdrlen = aInfo.CheckL(ext.iHdr->HeaderLength());
+ if (aInfo.iIcmp)
+ {
+ // Header is in returned packet of an ICMP Error
+ const TInt offset = aInfo.iOffset - aInfo.iOffsetIp;// Relative offset within problem packet
+ if (aInfo.iIcmp == KProtocolInet6Icmp && // only ICMP6 can be tested like this
+ aInfo.iType == KInet6ICMP_ParameterProblem &&// A parameter problem...
+ offset <= (TInt)aInfo.iParameter && // after start of this header?
+ offset + hdrlen > (TInt)aInfo.iParameter)// and before end of this header?
+ {
+ // Someone didn't accept my strange header.
+ // Could set some flag and stop sending it.
+ aPacket.Free();
+ return -1;
+ }
+ // Error is not about my header, fall to DONE
+ }
+ else
+ {
+ // Implement header semantics
+ // (none in this example).
+ }
+ // Header processed (Done), skip over
+ // - need to indicate the location of "my next header" field,
+ aInfo.iPrevNextHdr = (TUint16)(aInfo.iOffset+1);
+ // - need to make the protocol of the following header available
+ aInfo.iProtocol = ext.iHdr->NextHeader();
+ // - and finally, update the offset over my header.
+ aInfo.iOffset += hdrlen;
+ return KIp6Hook_DONE;
+ }
+
+</codeblock> </example>
+</taskbody><related-links>
+<link href="GUID-340C57A4-B799-502D-8B86-39955E2F4268.dita"><linktext>Creating
+an ESK File</linktext></link>
+<link href="GUID-88AB6957-6D2B-5668-8CC3-4E426E68C9B7.dita"><linktext>Writing an
+Outflow Hook</linktext></link>
</related-links></task>
\ No newline at end of file