<rdf:RDF
    xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
    xmlns:s='http://snipsnap.org/rdf/snip-schema#'
    xml:base='http://www.mobile-j.de/snipsnap/rdf'>
    <s:Snip rdf:about='http://www.mobile-j.de/snipsnap/rdf#J2ME/Sending+SMS+from+MIDlet+without+user+intervention'
         s:cUser='bjoernQ'
         s:oUser='bjoernQ'
         s:mUser='bjoernQ'>
        <s:name>J2ME/Sending SMS from MIDlet without user intervention</s:name>
        <s:content>One thing that many developers dream of is sending an SMS without any user intervention.&#xD;&#xA;&#xD;&#xA;Well, that&apos;s normally impossible even if the midlet is signed and running in the trusted 3rd party protection domain. But after hacking around for a while I found a way to do this on my 6600. It may work on other Symbian phones but I havent tested it. (If you have success with any other phone please let me know. It&apos;s reported to be working on the 6630 and 3230, too. So the chances are very high that this works on all Symbian 7 / 8 phones.)&#xD;&#xA;&#xD;&#xA;(This workaround is known to work on Nokia 6600,6630,6260,6680,6681,3230,7760,9500 on the new S60 3rd Edition phones you are out of luck!)&#xD;&#xA;&#xD;&#xA;So here is how the magic works.&#xD;&#xA;&#xD;&#xA;It&apos;s very much like the file reading thing. First we write an unsuspicious midlet that does almost nothing.&#xD;&#xA;&#xD;&#xA;{code}&#xD;&#xA;import javax.microedition.midlet.*;&#xD;&#xA;import javax.microedition.lcdui.*;&#xD;&#xA;import javax.microedition.midlet.*;&#xD;&#xA;import javax.microedition.lcdui.*;&#xD;&#xA;import javax.microedition.io.*;&#xD;&#xA;import java.io.*;&#xD;&#xA;import javax.wireless.messaging.*;&#xD;&#xA;&#xD;&#xA;public class TestMIDsMIDlet extends MIDlet implements CommandListener {&#xD;&#xA;    TextBox t;&#xD;&#xA;    private Command exitCommand; // The exit command&#xD;&#xA;    private Command xCommand; // The X command&#xD;&#xA;    private Display display;    // The display for this MIDlet&#xD;&#xA;    &#xD;&#xA;    public TestMIDsMIDlet() {&#xD;&#xA;        display = Display.getDisplay(this);&#xD;&#xA;        exitCommand = new Command(&quot;Exit&quot;, Command.SCREEN, 2);&#xD;&#xA;        xCommand = new Command(&quot;X&quot;, Command.SCREEN, 1);&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    public void startApp() {&#xD;&#xA;        t = new TextBox(&quot;Hello MIDlet&quot;, &quot;Number&quot;, 256, 0);&#xD;&#xA;        t.addCommand(exitCommand);&#xD;&#xA;        t.addCommand(xCommand);&#xD;&#xA;        t.setCommandListener(this);&#xD;&#xA;        display.setCurrent(t);&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    public void pauseApp() {&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    public void destroyApp(boolean unconditional) {&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    public void commandAction(Command c, Displayable s) {&#xD;&#xA;        if (c == exitCommand) {&#xD;&#xA;            destroyApp(false);&#xD;&#xA;            notifyDestroyed();&#xD;&#xA;        }&#xD;&#xA;        if (c == xCommand) {&#xD;&#xA;            try{&#xD;&#xA;                try {&#xD;&#xA;                    String addr = &quot;sms://&quot;+t.getString();&#xD;&#xA;                    MessageConnection conn = (MessageConnection)Connector.open(addr);&#xD;&#xA;                    TextMessage msg = (TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);&#xD;&#xA;                    msg.setPayloadText(&quot;Hello World!&quot;);&#xD;&#xA;                    conn.send(msg);&#xD;&#xA;                } catch (Exception e) {&#xD;&#xA;                    /// mhhhhh&#xD;&#xA;                    t.setString(e.toString());&#xD;&#xA;                    e.printStackTrace();&#xD;&#xA;                }&#xD;&#xA;            }catch(Exception ee){&#xD;&#xA;                t.setString(ee.toString());&#xD;&#xA;            }catch(Error ee){&#xD;&#xA;                t.setString(ee.toString());&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;As you can see this midlet only sends an SMS to a number entered by the user. Certainly it will ask for permission.&#xD;&#xA;&#xD;&#xA;Now we change the line:&#xD;&#xA;&#xD;&#xA;{code}&#xD;&#xA;String addr = &quot;sms://&quot;+t.getString();&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;into&#xD;&#xA;&#xD;&#xA;{code}&#xD;&#xA;String addr = &quot;xsms://&quot;+t.getString();&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This certainly don&apos;t works since &quot;xsms&quot; is not an registered protocol.&#xD;&#xA;&#xD;&#xA;So we add this protocol to the package com.symbian.midp.io.protocol.xsms:&#xD;&#xA;(To compile the com.symbian.midp.io.protocol.xsms.Protocol class you will need the &quot;kmidp20.zip&quot; from the Nokia Series_60_MIDP_SDK_2_1 (I guess an other version will do also) in your classpath.)&#xD;&#xA;&#xD;&#xA;{code}&#xD;&#xA;package com.symbian.midp.io.protocol.xsms;&#xD;&#xA;&#xD;&#xA;import com.symbian.gcf.*;&#xD;&#xA;import com.symbian.javax.wireless.messaging.SMSConnectionSession;&#xD;&#xA;import java.io.IOException;&#xD;&#xA;import javax.microedition.io.Connection;&#xD;&#xA;&#xD;&#xA;public final class Protocol extends ProtocolBase&#xD;&#xA;{&#xD;&#xA;    public Protocol()&#xD;&#xA;    {&#xD;&#xA;        super(&quot;sms&quot;, &quot;sms&quot;);&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    public void ensurePermission(String aName)&#xD;&#xA;    {&#xD;&#xA;        // do nothing ... hehe&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    public Connection openConnection(URI aUri, int aMode, boolean aTimeouts)&#xD;&#xA;        throws IOException&#xD;&#xA;    {&#xD;&#xA;        if(aUri.toString().startsWith(&quot;xsms&quot;)){&#xD;&#xA;            aUri = new URI(aUri.toString().substring(1));&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        com.symbian.gcf.ConnectionSession session = SMSConnectionSession.getSession();&#xD;&#xA;        String host = aUri.getHost();&#xD;&#xA;        ConnectionEndPoint connection;&#xD;&#xA;        if(isServerConnection(aUri))&#xD;&#xA;        {&#xD;&#xA;            connection = null;&#xD;&#xA;        } else&#xD;&#xA;        {&#xD;&#xA;            if(aMode == 1)&#xD;&#xA;                throw new IllegalArgumentException();&#xD;&#xA;            connection = new SMSClientConnectionImpl(session, aUri, 2);&#xD;&#xA;        }&#xD;&#xA;        connection.open();&#xD;&#xA;        return connection;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    protected boolean isServerConnection(URI aUri)&#xD;&#xA;    {&#xD;&#xA;        return aUri.getHost().length() == 0;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and we need this in that package:&#xD;&#xA;&#xD;&#xA;{code}&#xD;&#xA;package com.symbian.midp.io.protocol.xsms;&#xD;&#xA;import com.symbian.gcf.*;&#xD;&#xA;import com.symbian.javax.wireless.messaging.*;&#xD;&#xA;import com.symbian.midp.runtime.Security;&#xD;&#xA;import com.symbian.util.BlockingOperation;&#xD;&#xA;import com.symbian.util.NativeError;&#xD;&#xA;import java.io.IOException;&#xD;&#xA;import java.io.InterruptedIOException;&#xD;&#xA;import javax.wireless.messaging.*;&#xD;&#xA;&#xD;&#xA;class SMSClientConnectionImpl extends DatagramConnectionEndPoint&#xD;&#xA;    implements MessageConnection&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;    SMSClientConnectionImpl(ConnectionSession aSession, URI aUri, int aMode)&#xD;&#xA;        throws IOException&#xD;&#xA;    {&#xD;&#xA;        super(aSession, aUri, aMode);&#xD;&#xA;        iUri = aUri;&#xD;&#xA;        iSendPermissionArgs = new String[2];&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public final Message newMessage(String aType)&#xD;&#xA;    {&#xD;&#xA;        String address = null;&#xD;&#xA;        if(iUri.getHost().length() &gt; 0)&#xD;&#xA;            address = iUri.toString();&#xD;&#xA;        return newMessage(aType, address);&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public final Message newMessage(String aType, String aAddress)&#xD;&#xA;    {&#xD;&#xA;        Message msg;&#xD;&#xA;        if(aType.equals(&quot;binary&quot;))&#xD;&#xA;            msg = new BinaryMessageImpl(aAddress, 0L);&#xD;&#xA;        else&#xD;&#xA;        if(aType.equals(&quot;text&quot;))&#xD;&#xA;            msg = new TextMessageImpl(aAddress, 0L);&#xD;&#xA;        else&#xD;&#xA;            throw new IllegalArgumentException();&#xD;&#xA;        return msg;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public final int numberOfSegments(Message aMsg)&#xD;&#xA;    {&#xD;&#xA;        MessageImpl messageImpl = getMessageImpl(aMsg);&#xD;&#xA;        int numberOfSegments = 0;&#xD;&#xA;        synchronized(super.iCloseOperation.getLock())&#xD;&#xA;        {&#xD;&#xA;            if(super.iState != 2)&#xD;&#xA;                numberOfSegments = messageImpl.populateSmsData(super.iNativePeerHandle, 0);&#xD;&#xA;        }&#xD;&#xA;        if(numberOfSegments &lt; 0)&#xD;&#xA;            numberOfSegments = 0;&#xD;&#xA;        return numberOfSegments;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public final void send(Message aMsg)&#xD;&#xA;        throws IOException, InterruptedIOException&#xD;&#xA;    {&#xD;&#xA;        String address = aMsg.getAddress();&#xD;&#xA;        if(address == null)&#xD;&#xA;            throw new IllegalArgumentException(&quot;No address&quot;);&#xD;&#xA;        URI uri = new URI(address);&#xD;&#xA;        MessageImpl messageImpl = getMessageImpl(aMsg);&#xD;&#xA;        synchronized(super.iWriteOperation.getLock())&#xD;&#xA;        {&#xD;&#xA;            synchronized(super.iWriteOperation)&#xD;&#xA;            {&#xD;&#xA;                synchronized(super.iCloseOperation.getLock())&#xD;&#xA;                {&#xD;&#xA;                    ensureOpen();&#xD;&#xA;                    iSendPermissionArgs[0] = address;&#xD;&#xA;                    int numberOfSegments = messageImpl.populateSmsData(super.iNativePeerHandle, 1);&#xD;&#xA;                    if(numberOfSegments &lt; 0)&#xD;&#xA;                    {&#xD;&#xA;                        if(numberOfSegments == -40)&#xD;&#xA;                            throw new IllegalArgumentException(&quot;Message too big&quot;);&#xD;&#xA;                        NativeError.check(numberOfSegments);&#xD;&#xA;                    }&#xD;&#xA;                    iSendPermissionArgs[1] = Integer.toString(numberOfSegments);&#xD;&#xA;                    checkSecurity(&quot;javax.wireless.messaging.sms.send&quot;, iSendPermissionArgs);&#xD;&#xA;                    int status = _send(super.iNativePeerHandle, EMPTY_BYTE_ARRAY, 0, 0, address);&#xD;&#xA;                    checkError(status);&#xD;&#xA;                }&#xD;&#xA;                super.iWriteOperation.waitForCompletion();&#xD;&#xA;            }&#xD;&#xA;            checkError(super.iWriteOperation.getResult());&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public void setMessageListener(MessageListener aListener)&#xD;&#xA;        throws IOException&#xD;&#xA;    {&#xD;&#xA;        throw new IOException(&quot;Must be Server&quot;);&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    public Message receive()&#xD;&#xA;        throws IOException, InterruptedIOException&#xD;&#xA;    {&#xD;&#xA;        throw new IOException(&quot;Must be Server&quot;);&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    private static MessageImpl getMessageImpl(Message aMessage)&#xD;&#xA;    {&#xD;&#xA;        MessageImpl messageImpl = null;&#xD;&#xA;        try&#xD;&#xA;        {&#xD;&#xA;            messageImpl = (MessageImpl)aMessage;&#xD;&#xA;        }&#xD;&#xA;        catch(ClassCastException ex)&#xD;&#xA;        {&#xD;&#xA;            throw new IllegalArgumentException(&quot;Not from newMessage()&quot;);&#xD;&#xA;        }&#xD;&#xA;        return messageImpl;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    protected static void checkSecurity(String aPermission, String aPermissionArgs[])&#xD;&#xA;    {&#xD;&#xA;       // Security.ensurePermission(aPermission, aPermission, aPermissionArgs);&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    protected static final int MESSAGE_TYPE = 0;&#xD;&#xA;    private static final String MUST_BE_SERVER_MSG = &quot;Must be Server&quot;;&#xD;&#xA;    private static final String SEND_PERMISSION = &quot;javax.wireless.messaging.sms.send&quot;;&#xD;&#xA;    private static final int SEND_PERMISSION_ARGS_TOTAL = 2;&#xD;&#xA;    private static final int SEND_PERMISSION_ARGS_URI_INDEX = 0;&#xD;&#xA;    private static final int SEND_PERMISSION_ARGS_SEGMENTS_INDEX = 1;&#xD;&#xA;    private static final byte EMPTY_BYTE_ARRAY[] = new byte[0];&#xD;&#xA;    private URI iUri;&#xD;&#xA;    private String iSendPermissionArgs[];&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Compile. Now transfer the resulting jar-file but don&apos;t install it! Locate the installed midlet (e.g. &quot;E:/System/MIDlets/\[12345678\]&quot; and overwrite the contained jar with the newly created one. (Use FExplorer for example to locate the jar in your phone&apos;s inbox and copy it as described above.)&#xD;&#xA;&#xD;&#xA;Now launch the midlet and .... we&apos;re done. We can send an SMS without any notification.&#xD;&#xA;&#xD;&#xA;We could even send an SMS to one of the restricted ports. (Since we don&apos;t check that anymore but haven&apos;t tested it.)&#xD;&#xA;&#xD;&#xA;Unfortunately we can&apos;t receive SMS silently but sending is cool anyway.&#xD;&#xA;&#xD;&#xA;__Conclusion:__&#xD;&#xA;&#xD;&#xA;This is a rude hack and installing it involves a lot of user intervention. Since it could be possible to write a native Symbian SIS installer which does this trick for you it&apos;s still no security problem in my eyes. If someone installs a SIS she/he should know this beast can do anything with the phone.&#xD;&#xA;&#xD;&#xA;So this isn&apos;t a security issue I guess. It&apos;s just a nice hack.&#xD;&#xA;&#xD;&#xA;</s:content>
        <s:mTime>2006-04-24 10:34:38.782</s:mTime>
        <s:cTime>2005-03-14 16:18:47.12</s:cTime>
        <s:comments
             rdf:type='http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag'/>
        <s:snipLinks>
            <rdf:Bag>
                <rdf:li rdf:resource='#J2ME'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Fun with sending mms from a midlet'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/How to verify the phone&apos;s MSISDN'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Reading files from J2ME on a 6600'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Getting the IMEI or not ...'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Getting content from a MIDlet into the phone'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Products/GETrack'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Putting together BlueCove and avetanaOBEX'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Sending blinking sms to older Nokias ...'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Guessing the network operator'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Self signed midlets for the lazy bones'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/'/>
                <rdf:li rdf:resource='#snipsnap-search'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Start Real One Player from J2ME'/>
                <rdf:li>
                    <s:Snip rdf:about='http://www.mobile-j.de/snipsnap/rdf#J2ME/Sending+SMS+from+MIDlet+without+user+intervention'>
                        <s:attachments
                             rdf:type='http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag'/>
                    </s:Snip>
                </rdf:li>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/System.out redirect on S60 3rd Edition'/>
                <rdf:li rdf:resource='#snipsnap-index'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#PYTHON/Distributing Python apps'/>
                <rdf:li rdf:resource='#bjoernQ'/>
                <rdf:li rdf:resource='#snipsnap-notfound'/>
                <rdf:li rdf:resource='#Products'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Fun/Send PC screen to SU2'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-07-08/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Sending+SMS+from+MIDlet+without+user+intervention/'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Fun/Send captured images from phone to SU2'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Using the N95 accelerometer in Java - kind of'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Products/POIXpress'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Accelerometer BallGame code and binaries'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-05-17/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/jCIFS port for JME'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-12-09/1'/>
                <rdf:li rdf:resource='#snipsnap-copyright'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-12-23/1'/>
                <rdf:li rdf:resource='#adsense'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-10-05/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-03-08/2'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Products/S60 Screensaver Maker Pro'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Fun/Some MIDlets'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-08-20/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/MovingBall example ported to JME'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#SnipSnap/themes/Orange Valley/css/general.css'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-07-29/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2007-11-28/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2004-11-05/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2007-04-30/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#j2me/start+real+one+player+from+j2me'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-08-01/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-09-21/1'/>
                <rdf:li rdf:resource='#Fun'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-02-28/1'/>
                <rdf:li rdf:resource='#snipsnap-help'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-02-28/2'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#SnipSnap/themes/Orange Valley/css/debug.css'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-03-08/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2004-09-09/1'/>
                <rdf:li rdf:resource='#j2me'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2006-04-11/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-09-12/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2007-07-06/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#start/2005-10-31/1'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#J2ME/Sending SMS from MIDlet without user intervention/'/>
                <rdf:li rdf:resource='#Links'/>
                <rdf:li rdf:resource='http://www.mobile-j.de/snipsnap/rdf#Fun/Send+PC+screen+to+SU2'/>
            </rdf:Bag>
        </s:snipLinks>
    </s:Snip>
</rdf:RDF>
