Silverlight Help


Go Back

Silverlight 3 and RIA Service – Cross Domain Proxy Enhanced

Some time ago I wrote a very small RIA Service that could be used to overcome Cross Domain issues. It’s a proxy that sits between your Silverlight application and any server where you want to get content over http.

A lot people know that not even half of the public API’s have cross domain configurations in place. The best solution that’s left is a proxy that can forward the calls to the public API and return the response back to the original caller. This article will expand the Silverlight part of the Cross Domain Proxy. Nothing needs to be changed to the RIA Service part of this Cross Domain Proxy.

What is the problem we have with the solution from my earlier article about Cross Domain Proxy?

One thing: The Cross Domain Proxy RIA Service is a generic service that can be used for all cross domain accesses. So basically we could write an application that’s performing multiple calls through the cross domain proxy at the same time. But how do we use the responses? We basically have one event “ProcessCompleted”, should we then react to this event by doing different things? Yes that could be, but we could do it differently as well.

I’m thinking about a ProxyService that’s running on Silverlight which has a little bit more knowledge compared to the RIA Services generated stub. This service would enable to do a cross domain request but provide a function to be called on completion at the same time.

The code using this service would look like this (firing multiple cross domain requests at the same time):

var domainProxyService = new DomainProxyService();
domainProxyService.Process(
    new ProxyRequest
        {
            Url = "http://www.silverlight.net/"
        },
    response => Debug.WriteLine(string.Format("1:", response.Content)));
domainProxyService.Process(
    new ProxyRequest
        {
            Url = "http://www.asp.net/"
        },
    response => Debug.WriteLine(string.Format("2:", response.Content)));

domainProxyService.Process(
    new ProxyRequest
        {
            Url = "http://www.azure.net/"
        },
    response => Debug.WriteLine(string.Format("3:", response.Content)));

The DomainProxyService needs to be intelligent enough to be able to route the reponses to the correct function pointers.

So there needs to be a key that can help associate the request with the response. In my last article I introduced the property Id in the ProxyRequest and the RequestId in the ProxyResponse. But for all purpose I don’t want to put a value in the Id, as a caller I don’t use this field, it’s just for internal usage so that association between Request and Response is possible.

My idea is to put a dictionary in the DomainProxyService to associate the request id with a function pointer. I want the function point to be of a type void that accepts one parameter of type ProxyResponse. That would make a dictionary like this:

private readonly Dictionary<Guid, Action<ProxyResponse>> m_dictionaryOfListeners =
    new Dictionary<Guid, Action<ProxyResponse>>();

The method to process a request isn’t that difficult. It will generate a new Id if it’s still empty. Besides that it will add an item to the dictionary, the key with the associated function to call on completion. And after all the most important part, we will call the original RIA Service.

public void Process(ProxyRequest proxyRequest, Action<ProxyResponse> callBack)
{
    //Generate a unique id if it doesn't contain an id yet.
    if (Guid.Empty == proxyRequest.Id)
        proxyRequest.Id = Guid.NewGuid();
    //Add the callback to list of listeners for use on completion.
    m_dictionaryOfListeners.Add(proxyRequest.Id, callBack);

    m_domainProxy.Process(proxyRequest);
}

We will still need to have one generic listener for the ProcessCompleted event. This listener will look up the appropriate function to call in the dictionary. Will invoke the function and remove the item in the dictionary.

private void DomainProxyProcessCompleted(object sender, InvokeEventArgs e)
{
    var proxyResponse = e.ReturnValue as ProxyResponse;
    if (proxyResponse != null)
    {
        //If the dictionary contains listeners for this request
        if (m_dictionaryOfListeners.ContainsKey(proxyResponse.RequestId))
        {
            m_dictionaryOfListeners[proxyResponse.RequestId].Invoke(proxyResponse);
            m_dictionaryOfListeners.Remove(proxyResponse.RequestId);
        }
    }
}

To be complete here the full source of the DomainProxyService class. Please remember this article continues on my previous article about Domain Proxy.

public class DomainProxyService
{
    private readonly Dictionary<Guid, Action<ProxyResponse>> m_dictionaryOfListeners =
        new Dictionary<Guid, Action<ProxyResponse>>();

    private readonly DomainProxy m_domainProxy = new DomainProxy();

    public DomainProxyService()
    {
        m_domainProxy.ProcessCompleted += DomainProxyProcessCompleted;
    }

    private void DomainProxyProcessCompleted(object sender, InvokeEventArgs e)
    {
        var proxyResponse = e.ReturnValue as ProxyResponse;
        if (proxyResponse != null)
        {
            //If the dictionary contains listeners for this request
            if (m_dictionaryOfListeners.ContainsKey(proxyResponse.RequestId))
            {
                m_dictionaryOfListeners[proxyResponse.RequestId].Invoke(proxyResponse);
                m_dictionaryOfListeners.Remove(proxyResponse.RequestId);
            }
        }
    }

    public void Process(ProxyRequest proxyRequest, Action<ProxyResponse> callBack)
    {
        //Generate a unique id if it doesn't contain an id yet.
        if (Guid.Empty == proxyRequest.Id)
            proxyRequest.Id = Guid.NewGuid();
        //Add the callback to list of listeners for use on completion.
        m_dictionaryOfListeners.Add(proxyRequest.Id, callBack);

        m_domainProxy.Process(proxyRequest);
    }
}


Ps. This article is cross posted on:
Mark Monster’s blog and Silverlight Help.

Facebook DZone It! Digg It! StumbleUpon Technorati Del.icio.us NewsVine Reddit Blinklist Furl it!

Comments  247

  • khgyfngq 18 Jun, 06:01 AM

    khgyfngq
  • irvin 5 Jan, 12:22 PM

    xhE1Sb http://diW6V2Pkd0fGga78U1jf.com
  • xyRrGXK 18 Feb, 08:21 PM

    xyRrGXK
  • Kfqloaxd 19 Feb, 05:24 PM

    Excellent work, Nice Design
  • Woprcbxf 19 Feb, 06:44 PM

    Very interesting tale
  • Hgrfkvny 19 Feb, 08:04 PM

    very best job
  • Rgnhrrjo 19 Feb, 09:23 PM

    It's serious
  • Vtoodqhf 19 Feb, 10:42 PM

    I love this site
  • Tkyatbzp 20 Feb, 12:03 AM

    Hello good day
  • Uxlsmdkr 20 Feb, 01:23 AM

    Very Good Site
  • Uxlsmdkr 20 Feb, 01:23 AM

    Very Good Site
  • Fwhylsgq 20 Feb, 02:42 AM

    Thanks funny site
  • Awmkebct 20 Feb, 04:02 AM

    this post is fantastic
  • Iuoesmjr 20 Feb, 05:23 AM

    perfect design thanks
  • Aztpryao 20 Feb, 06:44 AM

    Very interesting tale
  • Vvnjwyng 20 Feb, 08:04 AM

    Best Site Good Work
  • Qzpwufoc 20 Feb, 09:24 AM

    Good crew it's cool :)
  • Ntnmykcb 20 Feb, 10:44 AM

    Best Site good looking
  • Zxxiekhu 20 Feb, 12:05 PM

    real beauty page
  • Jfwfrcwx 20 Feb, 01:26 PM

    very best job
  • Ptbdcvik 20 Feb, 02:45 PM

    magic story very thanks
  • Lepylbwh 20 Feb, 04:05 PM

    Best Site Good Work
  • Qqqahkvk 20 Feb, 05:24 PM

    This site is crazy :)
  • Ruyktywl 20 Feb, 06:43 PM

    very best job
  • Agfzjgru 20 Feb, 08:04 PM

    magic story very thanks
  • Jjpzwoaa 20 Feb, 09:24 PM

    this post is fantastic
  • Jjpzwoaa 20 Feb, 09:28 PM

    this post is fantastic
  • Wvdadhso 20 Feb, 10:43 PM

    Gloomy tales
  • Qptwtjul 21 Feb, 12:02 AM

    Hello good day
  • Hdtuknch 21 Feb, 01:22 AM

    good material thanks
  • Ndsydfry 21 Feb, 02:41 AM

    good material thanks
  • Mwcnfkoh 21 Feb, 05:19 AM

    Jonny was here
  • Mwcnfkoh 21 Feb, 05:20 AM

    Jonny was here
  • Iuptjfov 21 Feb, 06:40 AM

    Good crew it's cool :)
  • Iuptjfov 21 Feb, 06:40 AM

    Good crew it's cool :)
  • Lnwlperb 21 Feb, 07:59 AM

    Very Good Site
  • Cwklfbga 21 Feb, 09:19 AM

    Very funny pictures
  • Uxhxabgv 21 Feb, 10:40 AM

    magic story very thanks
  • Iorkkyne 21 Feb, 12:00 PM

    Very interesting tale
  • Sluqbypl 21 Feb, 01:21 PM

    Gloomy tales
  • Zndicomu 21 Feb, 03:11 PM

    Thanks funny site
  • Zndicomu 21 Feb, 03:12 PM

    Thanks funny site
  • Zoewgxnt 21 Feb, 05:06 PM

    Jonny was here
  • Knizxctd 21 Feb, 05:06 PM

    Hello good day
  • Sodbuujv 21 Feb, 05:06 PM

    Hello good day
  • Dvwholjw 21 Feb, 07:01 PM

    Wonderfull great site
  • Statbrew 21 Feb, 07:01 PM

    very best job
  • Vqsbhghu 21 Feb, 07:02 PM

    I'm happy very good site
  • Vxcaiokq 21 Feb, 08:58 PM

    I'm happy very good site
  • Ftdacncs 21 Feb, 08:58 PM

    perfect design thanks
  • Henskcqj 21 Feb, 08:59 PM

    good material thanks
  • Dyhzikmg 21 Feb, 10:57 PM

    Best Site Good Work
  • Hvnoesxv 21 Feb, 10:57 PM

    this is be cool 8)
  • Ofwuedvq 21 Feb, 10:57 PM

    perfect design thanks
  • Jntidokg 22 Feb, 12:57 AM

    Jonny was here
  • Kzlgwwwy 22 Feb, 12:57 AM

    perfect design thanks
  • Zjouchoj 22 Feb, 12:58 AM

    Very Good Site
  • Kqeznsgk 22 Feb, 02:57 AM

    Best Site good looking
  • Qlqsjnsb 22 Feb, 02:57 AM

    Good crew it's cool :)
  • Hkqwecsw 22 Feb, 02:57 AM

    Good crew it's cool :)
  • Vlwlpjzq 22 Feb, 04:56 AM

    this post is fantastic
  • Vlwlpjzq 22 Feb, 04:56 AM

    this post is fantastic
  • Sflewknb 22 Feb, 06:56 AM

    Hello good day
  • Hruyjhvo 22 Feb, 06:56 AM

    It's funny goodluck
  • Jzdhipsl 22 Feb, 06:56 AM

    I'm happy very good site
  • Tobkasos 22 Feb, 09:00 AM

    Gloomy tales
  • Rbpwcbls 22 Feb, 09:00 AM

    Wonderfull great site
  • Swkqxews 22 Feb, 09:01 AM

    I love this site
  • Yrizpmab 22 Feb, 11:01 AM

    This site is crazy :)
  • Yrizpmab 22 Feb, 11:02 AM

    This site is crazy :)
  • Aqksfvps 22 Feb, 12:58 PM

    Gloomy tales
  • Qupqlrgw 22 Feb, 12:59 PM

    i'm fine good work
  • Jsyfhghf 22 Feb, 12:59 PM

    Best Site Good Work
  • Weywepgw 22 Feb, 02:56 PM

    Best Site Good Work
  • Qfvkhrqg 22 Feb, 02:56 PM

    Good crew it's cool :)
  • Pshwdxmq 22 Feb, 02:57 PM

    real beauty page
  • Vjcdbleq 22 Feb, 04:54 PM

    Punk not dead
  • Qpxkgfxl 22 Feb, 04:55 PM

    It's funny goodluck
  • Xwjpxsuq 22 Feb, 04:55 PM

    this is be cool 8)
  • Xqpdpsai 22 Feb, 06:51 PM

    Very interesting tale
  • Asvkalvf 22 Feb, 06:51 PM

    this post is fantastic
  • Efanhmgi 22 Feb, 06:51 PM

    i'm fine good work
  • Qjvqhqxj 22 Feb, 08:49 PM

    Best Site good looking
  • Ycgfhzip 22 Feb, 08:50 PM

    This site is crazy :)
  • Sskyxriq 22 Feb, 08:50 PM

    Very interesting tale
  • Eddgtyse 22 Feb, 10:47 PM

    It's funny goodluck
  • Rnsofcls 22 Feb, 10:48 PM

    Very Good Site
  • Txvakexv 22 Feb, 10:48 PM

    i'm fine good work
  • Otydpqex 23 Feb, 12:46 AM

    Punk not dead
  • Wchmbegh 23 Feb, 12:46 AM

    It's serious
  • Sxpiwfmo 23 Feb, 12:46 AM

    Hello good day
  • Zizetklu 23 Feb, 02:46 AM

    Jonny was here
  • Nngkphrm 23 Feb, 02:46 AM

    Excellent work, Nice Design
  • Hfytppbo 23 Feb, 02:46 AM

    It's serious
  • Xkhecdin 23 Feb, 04:43 AM

    Jonny was here
  • Inbodznk 23 Feb, 04:44 AM

    It's serious
  • Xlwaghrf 23 Feb, 04:44 AM

    perfect design thanks
  • Cqbtpxmo 23 Feb, 06:46 AM

    Very interesting tale
  • Cqbtpxmo 23 Feb, 06:46 AM

    Very interesting tale
  • Kjdyqudg 23 Feb, 06:47 AM

    This site is crazy :)
  • Yiuinaem 23 Feb, 06:47 AM

    perfect design thanks
  • Mvcykyhc 23 Feb, 08:52 AM

    very best job
  • Crpltzaa 23 Feb, 08:52 AM

    Very interesting tale
  • Xfazcrcq 23 Feb, 02:55 PM

    Thanks funny site
  • Tqhofqqz 23 Feb, 02:55 PM

    Very funny pictures
  • Rznqmnad 23 Feb, 02:56 PM

    Jonny was here
  • Lryoafid 23 Feb, 04:58 PM

    Excellent work, Nice Design
  • Anowhzma 23 Feb, 04:58 PM

    perfect design thanks
  • Mtlwlqhs 23 Feb, 04:59 PM

    This site is crazy :)
  • Cbvohfvm 23 Feb, 06:45 PM

    Punk not dead
  • Zesiqhwq 23 Feb, 06:46 PM

    Best Site Good Work
  • Eoswxaoz 23 Feb, 08:29 PM

    i'm fine good work
  • Sagfcraq 23 Feb, 08:30 PM

    real beauty page
  • Kufhsqcg 23 Feb, 10:13 PM

    Jonny was here
  • Kufhsqcg 23 Feb, 10:13 PM

    Jonny was here
  • Varvdgit 23 Feb, 10:14 PM

    Hello good day
  • Varvdgit 23 Feb, 10:15 PM

    Hello good day
  • Naykwkky 23 Feb, 11:56 PM

    Very funny pictures
  • Xoxicfmk 23 Feb, 11:56 PM

    perfect design thanks
  • Jzadmpxc 24 Feb, 01:40 AM

    Very funny pictures
  • Vjpzgkxo 24 Feb, 01:41 AM

    It's funny goodluck
  • Zantzvqe 24 Feb, 03:25 AM

    Best Site Good Work
  • Ukdyfmku 24 Feb, 03:25 AM

    i'm fine good work
  • Bdynsjsz 24 Feb, 05:09 AM

    real beauty page
  • Yfgkrues 24 Feb, 05:09 AM

    Good crew it's cool :)
  • Jumyryhg 24 Feb, 06:54 AM

    real beauty page
  • Gfinssjr 24 Feb, 06:54 AM

    Good crew it's cool :)
  • Cizyuene 24 Feb, 08:40 AM

    Hello good day
  • Cizyuene 24 Feb, 08:40 AM

    Hello good day
  • Hoqoxslx 24 Feb, 08:40 AM

    i'm fine good work
  • Mjhqyuvx 24 Feb, 10:24 AM

    I love this site
  • Tedcobwr 24 Feb, 10:27 AM

    This site is crazy :)
  • Tedcobwr 24 Feb, 10:27 AM

    This site is crazy :)
  • Csipawze 24 Feb, 12:08 PM

    Thanks funny site
  • Pcaaeytu 24 Feb, 12:08 PM

    Hello good day
  • Cjhjfkfo 24 Feb, 01:52 PM

    real beauty page
  • Ldfecuvu 24 Feb, 01:52 PM

    magic story very thanks
  • Fnkxuzly 24 Feb, 03:49 PM

    this is be cool 8)
  • Xzjqwwor 24 Feb, 03:50 PM

    Jonny was here
  • Hwtnenus 24 Feb, 03:50 PM

    Very funny pictures
  • Qcwsickf 24 Feb, 05:49 PM

    I love this site
  • Qcwsickf 24 Feb, 05:49 PM

    I love this site
  • Xolqqqao 24 Feb, 05:49 PM

    Thanks funny site
  • Hwwvgzri 24 Feb, 05:50 PM

    good material thanks
  • Uirhvpos 24 Feb, 07:49 PM

    Punk not dead
  • Zzrlflaz 24 Feb, 07:50 PM

    I love this site
  • Lccdnujd 24 Feb, 07:50 PM

    I'm happy very good site
  • Hkptjtwj 24 Feb, 09:53 PM

    Wonderfull great site
  • Iywqlvlf 24 Feb, 09:53 PM

    good material thanks
  • Dirzeijf 24 Feb, 09:53 PM

    Jonny was here
  • Ywbykelv 24 Feb, 11:54 PM

    I love this site
  • Fgaaqypy 24 Feb, 11:54 PM

    i'm fine good work
  • Smkvyymt 24 Feb, 11:55 PM

    Punk not dead
  • Ipvfptmm 25 Feb, 01:55 AM

    Hello good day
  • Ehbacmng 25 Feb, 01:55 AM

    Very Good Site
  • Etaghqfk 25 Feb, 01:56 AM

    Gloomy tales
  • Irlcvcea 25 Feb, 03:56 AM

    It's serious
  • Smjllgcu 25 Feb, 03:56 AM

    This site is crazy :)
  • Ktkqyrvk 25 Feb, 03:57 AM

    Very interesting tale
  • Uoosinji 25 Feb, 05:57 AM

    Good crew it's cool :)
  • Uoosinji 25 Feb, 05:58 AM

    Good crew it's cool :)
  • Oiitdqtm 25 Feb, 08:03 AM

    This site is crazy :)
  • Lonfmihr 25 Feb, 08:04 AM

    Very Good Site
  • Dtjbzetc 25 Feb, 08:05 AM

    Gloomy tales
  • Humxzfka 25 Feb, 10:07 AM

    Cool site goodluck :)
  • Dbopkxgg 25 Feb, 10:07 AM

    very best job
  • Humxzfka 25 Feb, 10:07 AM

    Cool site goodluck :)
  • Uxblipge 25 Feb, 10:08 AM

    Thanks funny site
  • Tutleimk 25 Feb, 12:04 PM

    Very Good Site
  • Vvkrgtlf 25 Feb, 12:04 PM

    Thanks funny site
  • Kqsrbjiy 25 Feb, 12:05 PM

    I love this site
  • Dasnfitf 25 Feb, 02:01 PM

    Excellent work, Nice Design
  • Jselbgwg 25 Feb, 02:02 PM

    Punk not dead
  • Stldpltf 25 Feb, 05:22 PM

    It's funny goodluck
  • Vglljqsd 25 Feb, 05:23 PM

    I love this site
  • Djptmncy 25 Feb, 07:02 PM

    this post is fantastic
  • Bigiowwq 25 Feb, 07:02 PM

    This site is crazy :)
  • Bigiowwq 25 Feb, 07:03 PM

    This site is crazy :)
  • Xzdborlo 25 Feb, 08:40 PM

    magic story very thanks
  • Xmenugxl 25 Feb, 08:40 PM

    This site is crazy :)
  • Dxrnjmdj 25 Feb, 10:17 PM

    good material thanks
  • Nrdwvfqi 25 Feb, 10:17 PM

    I'm happy very good site
  • Ahsalhyh 26 Feb, 12:10 AM

    magic story very thanks
  • Wprxeliu 26 Feb, 12:10 AM

    It's funny goodluck
  • Lxdxtcfw 26 Feb, 12:11 AM

    this post is fantastic
  • Pnsdekqe 26 Feb, 02:06 AM

    Jonny was here
  • Pnsdekqe 26 Feb, 02:07 AM

    Jonny was here
  • Pnsdekqe 26 Feb, 02:07 AM

    Jonny was here
  • Jyipnaij 26 Feb, 04:02 AM

    this post is fantastic
  • Jyipnaij 26 Feb, 04:03 AM

    this post is fantastic
  • Iekigwxu 26 Feb, 05:58 AM

    perfect design thanks
  • Nfdoabal 26 Feb, 05:58 AM

    good material thanks
  • Alricfci 26 Feb, 05:59 AM

    Punk not dead
  • Izkhassr 26 Feb, 07:56 AM

    Jonny was here
  • Sgayxuoy 26 Feb, 07:56 AM

    perfect design thanks
  • Hamafjve 26 Feb, 07:57 AM

    Gloomy tales
  • Aomwbucl 26 Feb, 09:54 AM

    Cool site goodluck :)
  • Aomwbucl 26 Feb, 09:55 AM

    Cool site goodluck :)
  • Jteloent 26 Feb, 09:55 AM

    It's funny goodluck
  • Sinfeutr 26 Feb, 11:51 AM

    Wonderfull great site
  • Cjekrnds 26 Feb, 11:51 AM

    Punk not dead
  • Hscmnjcj 26 Feb, 11:52 AM

    this is be cool 8)
  • Wggzslpy 26 Feb, 01:46 PM

    good material thanks
  • Wggzslpy 26 Feb, 01:46 PM

    good material thanks
  • Ejwdrjrf 26 Feb, 01:47 PM

    Very interesting tale
  • Znrpcegt 26 Feb, 01:47 PM

    Thanks funny site
  • Wejkgpmb 26 Feb, 03:38 PM

    this post is fantastic
  • Zdargbyj 26 Feb, 03:39 PM

    very best job
  • Aiydokfr 26 Feb, 03:39 PM

    Good crew it's cool :)
  • Azwrowuc 26 Feb, 05:31 PM

    Cool site goodluck :)
  • Mdydtstr 26 Feb, 05:32 PM

    Thanks funny site
  • Ftcffmyf 26 Feb, 05:32 PM

    Jonny was here
  • Lelwuxxd 26 Feb, 07:27 PM

    magic story very thanks
  • Lelwuxxd 26 Feb, 07:28 PM

    magic story very thanks
  • Tzjaxuzu 26 Feb, 09:24 PM

    magic story very thanks
  • Tzjaxuzu 26 Feb, 09:24 PM

    magic story very thanks
  • Tzjaxuzu 26 Feb, 09:25 PM

    magic story very thanks
  • Zsahjgca 26 Feb, 11:20 PM

    Thanks funny site
  • Bmjmxthw 26 Feb, 11:21 PM

    Punk not dead
  • Frjgxbko 26 Feb, 11:22 PM

    Hello good day
  • Drkoqrvc 27 Feb, 01:15 AM

    Excellent work, Nice Design
  • Fgqqqpnh 27 Feb, 01:16 AM

    Punk not dead
  • Fgqqqpnh 27 Feb, 01:17 AM

    Punk not dead
  • Fgqqqpnh 27 Feb, 01:17 AM

    Punk not dead
  • Fajjthyy 27 Feb, 01:17 AM

    Good crew it's cool :)
  • Uwctthuz 27 Feb, 03:11 AM

    I love this site
  • Nzaxyyjy 27 Feb, 03:11 AM

    Cool site goodluck :)
  • Zrwggnqq 27 Feb, 03:12 AM

    I'm happy very good site
  • Neuknwsw 27 Feb, 05:07 AM

    perfect design thanks
  • Frqgcerr 27 Feb, 05:07 AM

    Very interesting tale
  • Gcehloiv 27 Feb, 05:07 AM

    Cool site goodluck :)
  • Qdafznet 27 Feb, 07:11 AM

    very best job
  • Koveqgdl 27 Feb, 07:12 AM

    real beauty page
  • Iwvskril 27 Feb, 07:13 AM

    Wonderfull great site
  • Qfheiamb 27 Feb, 09:16 AM

    very best job
  • Cnrcktmr 27 Feb, 09:17 AM

    Jonny was here
  • Giprnuok 27 Feb, 09:18 AM

    It's funny goodluck
  • Acbvsmih 27 Feb, 11:19 AM

    Excellent work, Nice Design
  • Qkxvzdph 27 Feb, 11:20 AM

    I'm happy very good site
  • Qninofyo 27 Feb, 11:20 AM

    Good crew it's cool :)
  • Whzzlitk 27 Feb, 01:20 PM

    It's funny goodluck
  • Kniimkfb 27 Feb, 01:20 PM

    this is be cool 8)
  • Ebvbqczh 27 Feb, 01:21 PM

    i'm fine good work
  • Uumpxddd 27 Feb, 03:23 PM

    Punk not dead
  • Uumpxddd 27 Feb, 03:24 PM

    Punk not dead
  • Zknyqqtt 27 Feb, 03:24 PM

    Best Site good looking
  • Uescypdu 27 Feb, 03:24 PM

    Very Good Site
Post a comment!
  1. Formatting options