Hi, By looking at these results, I have debugged deeper to find something,
Here what I notice is the SID passed to the method argument is not exists in the back-end database. I have checked it. So why we use this logic to get room types? What is the relationship between room types and session ? Thanks! On Thu, Apr 18, 2013 at 6:05 PM, Andun Sameera <[email protected]> wrote: > I have did a debug on the following code segment of Conference Service > Class, > > public List<RoomType> getRoomTypes(String SID) { > Long users_id = sessiondataDao.checkSession(SID); > Long user_level = userManager.getUserLevelByID(users_id); > if (authLevelUtil.checkUserLevel(user_level)) { > User user = userManager.getUserById(users_id); > return roomManager.getAllRoomTypes(user.getLanguage_id()); > } > return null; > } > > When a OM registered user or OM unregistered user clicks on the "click > here to enter room" link, this code executes two times, > > For the fist time, > > user_id is -1 and user_level is 1, user=null > > For the second time, > > user_id is 0 and user_level is -1, > authLevelUtil.checkUserLevel(user_level) is false > > Both time for the particular session no user is found. Is there a error in > session persisting logic? > > Thanks! > > > On Thu, Apr 18, 2013 at 3:35 PM, Andun Sameera <[email protected]> wrote: > >> OK Maxim, Will have a look. >> >> >> On Thu, Apr 18, 2013 at 3:33 PM, Maxim Solodovnik >> <[email protected]>wrote: >> >>> Just put breakpoint into this method and take a look what is going on ... >>> Currently we just ignoring these errors, but i believe the code should be >>> corrected >>> >>> >>> On Thu, Apr 18, 2013 at 5:01 PM, Andun Sameera <[email protected]> >>> wrote: >>> >>> > Hi Maxim, >>> > >>> > Is there any particular instruction or methods to investigate about >>> this ? >>> > I will look in to this. >>> > >>> > Thanks! >>> > >>> > On Thu, Apr 18, 2013 at 2:54 PM, Maxim Solodovnik < >>> [email protected] >>> > >wrote: >>> > >>> > > This need to be investigated ... >>> > > maybe additional check is necessary like userId/level is not null ... >>> > > >>> > > >>> > > On Sun, Apr 14, 2013 at 3:22 AM, Andun Sameera <[email protected]> >>> > wrote: >>> > > >>> > > > Hi All, >>> > > > >>> > > > The getRoomTypes method of autoloaderBarOnly, calls the >>> > > > getRoomTypes(String SID) method of ConferenceService class. There >>> it >>> > > > tries to fetch user id form the session suing the backend db like >>> > > > this, >>> > > > >>> > > > Long users_id = sessiondataDao.checkSession(SID); >>> > > > >>> > > > That is the point where this fails. As I understood there have to >>> be a >>> > > > entry in the back end db related to the invitation and the >>> > > > user(Internal/External). >>> > > > >>> > > > Some instructions or corrections will be needed to proceed. >>> > > > >>> > > > Thanks! >>> > > > >>> > > > On Thu, Apr 11, 2013 at 4:40 PM, Andun Sameera <[email protected] >>> > >>> > > wrote: >>> > > > > Hi All, >>> > > > > >>> > > > > Just now noticed that when a person click on the link "Click >>> here to >>> > > > > enter room", following exceptions are logged in the server >>> console. >>> > > > > >>> > > > > [ERROR] [NioProcessor-2] org.red5.server.service.ServiceInvoker - >>> > > > > Error executing call: Service: conferenceservice Method: >>> getRoomTypes >>> > > > > Num Params: 1 0: e1ed5f812af1a913fcb55a58d5793864 >>> > > > > java.lang.reflect.InvocationTargetException: null >>> > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>> > Method) >>> > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> > > >>> > >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>> > > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> > > >>> > >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>> > > > > ~[na:1.7.0_17] >>> > > > > at java.lang.reflect.Method.invoke(Method.java:601) >>> > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.java:196) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.java:115) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> org.red5.server.net.rtmp.RTMPHandler.invokeCall(RTMPHandler.java:164) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > org.red5.server.net.rtmp.RTMPHandler.onInvoke(RTMPHandler.java:409) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmp.BaseRTMPHandler.messageReceived(BaseRTMPHandler.java:132) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmp.RTMPMinaIoHandler.messageReceived(RTMPMinaIoHandler.java:170) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:690) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:407) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:236) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmpe.RTMPEIoFilter.messageReceived(RTMPEIoFilter.java:130) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) >>> > > > > [mina-core-2.0.7.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>> > > > > [na:1.7.0_17] >>> > > > > at >>> > > > >>> > > >>> > >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>> > > > > [na:1.7.0_17] >>> > > > > at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17] >>> > > > > Caused by: java.lang.NullPointerException: null >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.openmeetings.remote.ConferenceService.getRoomTypes(ConferenceService.java:416) >>> > > > > ~[openmeetings-3.0.0-SNAPSHOT.jar:na] >>> > > > > ... 35 common frames omitted >>> > > > > >>> > > > > And also this, >>> > > > > >>> > > > > >>> > > > > ERROR 04-11 16:36:08.544 UserService.java 114998 156 >>> > > > > org.apache.openmeetings.remote.UserService >>> [Red5_Scheduler_Worker-1] >>> > - >>> > > > > [getUserSelf] >>> > > > > java.lang.NullPointerException: null >>> > > > > at >>> > > > >>> > > >>> > >>> org.apache.openmeetings.remote.UserService.getUserSelf(UserService.java:152) >>> > > > > ~[openmeetings-3.0.0-SNAPSHOT.jar:na] >>> > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>> > Method) >>> > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> > > >>> > >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>> > > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> > > >>> > >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>> > > > > ~[na:1.7.0_17] >>> > > > > at java.lang.reflect.Method.invoke(Method.java:601) >>> > > > ~[na:1.7.0_17] >>> > > > > at >>> > > > >>> org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.java:196) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.java:115) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> org.red5.server.net.rtmp.RTMPHandler.invokeCall(RTMPHandler.java:164) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > org.red5.server.net.rtmp.RTMPHandler.onInvoke(RTMPHandler.java:409) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmp.BaseRTMPHandler.messageReceived(BaseRTMPHandler.java:132) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmpt.RTMPTHandler.messageReceived(RTMPTHandler.java:124) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.net.rtmpt.RTMPTConnection$ProcessJob.execute(RTMPTConnection.java:253) >>> > > > > [red5-server.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.red5.server.scheduling.QuartzSchedulingServiceJob.execute(QuartzSchedulingServiceJob.java:56) >>> > > > > [red5-server.jar:na] >>> > > > > at org.quartz.core.JobRunShell.run(JobRunShell.java:213) >>> > > > [quartz-2.1.6.jar:na] >>> > > > > at >>> > > > >>> > > >>> > >>> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) >>> > > > > [quartz-2.1.6.jar:na] >>> > > > > >>> > > > > >>> > > > > Is this functionality broken ? Shall I come with a Jira? >>> > > > > Thanks >>> > > > > AndunSLG >>> > > > > >>> > > > > >>> > > > > On Thu, Apr 11, 2013 at 1:26 AM, Andun Sameera < >>> [email protected]> >>> > > > wrote: >>> > > > >> Hi All, >>> > > > >> >>> > > > >> To check what is going on, I have gone through code where it >>> starts >>> > > > >> with >>> > > > >>> > > >>> > >>> singlewebapp/WebContent/src/base/hibernate/hibRtmpConnection.getInvitationByHash >>> > > > >> method and until showing the the dash board. In that I have >>> noticed >>> > > > >> that following code segment of the >>> > > > >> >>> > > >>> singlewebapp/WebContent/src/modules/invitation/invitationQuickLoader.lzx >>> > > > >> handles the login mechanism of the process. >>> > > > >> >>> > > > >> <method name="login"> >>> > > > >> this.userlang = Number(this.languages.getValue()); >>> > > > >> >>> this.labellanguages.setAttribute('visibility','hidden'); >>> > > > >> this.languages.setAttribute('visibility','hidden'); >>> > > > >> this.connect.setAttribute('visibility','hidden'); >>> > > > >> >>> this.labelloading.setAttribute('visibility','visible'); >>> > > > >> >>> > > > >> parent.userlang = Number(this.userlang); >>> > > > >> >>> > > > >> var userObject = new Array(); >>> > > > >> >>> > > > >> >>> > > > >>> > > >>> > >>> canvas.setAttribute('currentuser',canvas.thishib.currentInvitation.invitedEMail); >>> > > > >> canvas.setAttribute('user_id',-1); >>> > > > >> canvas.setAttribute('firstName',""); >>> > > > >> >>> > > > >>> > > >>> > >>> canvas.setAttribute('lastName',canvas.thishib.currentInvitation.invitedEMail); >>> > > > >> canvas.setAttribute('mail',canvas.mail); >>> > > > >> canvas.setAttribute('lastLogin',''); >>> > > > >> canvas.setAttribute('official_code',''); >>> > > > >> canvas.setAttribute('picture_uri',''); >>> > > > >> canvas.setAttribute('language',''); >>> > > > >> >>> > > > >> userObject["login"] = >>> > > > canvas.thishib.currentInvitation.invitedEMail; >>> > > > >> userObject["firstname"] = ""; >>> > > > >> userObject["lastname"] = >>> > > > >> canvas.thishib.currentInvitation.invitedEMail; >>> > > > >> userObject["adresses"] = new Array(); >>> > > > >> //userObject["adresses"]["emails"] = new Array(); >>> > > > >> userObject["adresses"]["email"] = >>> > > > >> canvas.thishib.currentInvitation.invitedEMail; >>> > > > >> //userObject["adresses"]["emails"][0]["mail"] = new >>> > > Array(); >>> > > > >> >>> //userObject["adresses"]["emails"][0]["mail"]["email"] = >>> > > > >> canvas.thishib.currentInvitation.invitedEMail; >>> > > > >> >>> > > > >> hib.userobject = userObject; >>> > > > >> >>> > > > >> hib.userlang = Number(this.userlang); >>> > > > >> canvas.thishib.loaderVar = new >>> > > lz.autoloaderBarOnly(canvas); >>> > > > >> canvas.thishib.loaderVar.setProgress(); >>> > > > >> this.close(); >>> > > > >> >>> canvas.thishib.loaderVar.getLanguageByIdAndMax.doCall(); >>> > > > >> </method> >>> > > > >> >>> > > > >> Parallel to this I have checked >>> > > > >> /singlewebapp/WebContent/src/base/auth/checkLoginData.lzx to >>> find >>> > the >>> > > > >> login process of given user name name and password. There I >>> found >>> > that >>> > > > >> after submitting correct user name and password, the method >>> > > > >> xmlcrm.loginUser return a user object which have all the >>> details of >>> > > > >> user. That object is assigned to hib.userobject as follows. >>> > > > >> >>> > > > >> hib.userobject = value; >>> > > > >> >>> > > > >> So that means in the above code of invitationQuickLoader, >>> > > > >> hib.userobject = userObject; have to do the same thing. >>> > > > >> >>> > > > >> But I found that on the way of showing the dashboard, in the >>> > > > >> >>> > > > >>> > > >>> > >>> /singlewebapp/WebContent/src/modules/invitation/autoloaderBarOnly.getRoomTypes >>> > > > >> method it fails to get room type. Debug log shows that >>> getRoomTypes >>> > : >>> > > > >> null. That means when we logged with invitation hash it cant get >>> > these >>> > > > >> room details. >>> > > > >> >>> > > > >> Thanks! >>> > > > >> >>> > > > >> On Thu, Apr 11, 2013 at 12:02 AM, Andun Sameera < >>> [email protected] >>> > > >>> > > > wrote: >>> > > > >>> Hi All, >>> > > > >>> >>> > > > >>> I am investigating following issue at [1]. In that process I >>> > > > >>> encountered following problem. I have scheduled some meetings >>> using >>> > > > >>> following methods, >>> > > > >>> >>> > > > >>> - Clicking on the calender date to create a meeting and >>> sending an >>> > > > >>> invitation to registered OM users /external people via iCal >>> > > > >>> - Clicking on the calender date to create a meeting and >>> sending an >>> > > > >>> invitation to registered OM users /external people via simple >>> mail >>> > > > >>> - Composing a mail with Book Conference room option and sending >>> > that >>> > > > >>> mail to registered OM users /external people. >>> > > > >>> >>> > > > >>> In each of these situations people will get a mail with link >>> "Click >>> > > > >>> here to enter room". When I click those links it redirects to a >>> > > > >>> dashboard and not to the room. This happens to the registered >>> OM >>> > > users >>> > > > >>> as well as unregistered people. Also when I looked at the >>> profile >>> > of >>> > > > >>> that page I found all details are empty for both registered >>> users >>> > > case >>> > > > >>> and external user case. >>> > > > >>> >>> > > > >>> But with the registered user's case. When we logged in those >>> > meeting >>> > > > >>> rooms are displayed. So why this want work with clicking the >>> link >>> > in >>> > > > >>> email? Did something wrong with my configuration or setup ? >>> Also I >>> > am >>> > > > >>> checking on >>> > > > >>> > >>> singlewebapp/WebContent/src/modules/invitation/invitationQuickLoader.lzx >>> > > > >>> to find a reason. >>> > > > >>> >>> > > > >>> [1] - https://issues.apache.org/jira/browse/OPENMEETINGS-481 >>> > > > >>> >>> > > > >>> Thanks! >>> > > > >>> -- >>> > > > >>> Regards >>> > > > >>> Andun S.L. Gunawardana >>> > > > >>> Undergraduate >>> > > > >>> Department of Computer Science And Engineering >>> > > > >>> University of Moratuwa >>> > > > >>> Sri Lanka >>> > > > >>> >>> > > > >>> Blog - http://www.insightforfuture.blogspot.com/ >>> > > > >>> LinkedIn - >>> > > > http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >>> > > > >>> Twitter -http://twitter.com/AndunSLG >>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> -- >>> > > > >> Regards >>> > > > >> Andun S.L. Gunawardana >>> > > > >> Undergraduate >>> > > > >> Department of Computer Science And Engineering >>> > > > >> University of Moratuwa >>> > > > >> Sri Lanka >>> > > > >> >>> > > > >> Blog - http://www.insightforfuture.blogspot.com/ >>> > > > >> LinkedIn - >>> > > http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >>> > > > >> Twitter -http://twitter.com/AndunSLG >>> > > > > >>> > > > > >>> > > > > >>> > > > > -- >>> > > > > Regards >>> > > > > Andun S.L. Gunawardana >>> > > > > Undergraduate >>> > > > > Department of Computer Science And Engineering >>> > > > > University of Moratuwa >>> > > > > Sri Lanka >>> > > > > >>> > > > > Blog - http://www.insightforfuture.blogspot.com/ >>> > > > > LinkedIn - >>> > > http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >>> > > > > Twitter -http://twitter.com/AndunSLG >>> > > > >>> > > > >>> > > > >>> > > > -- >>> > > > Regards >>> > > > Andun S.L. Gunawardana >>> > > > Undergraduate >>> > > > Department of Computer Science And Engineering >>> > > > University of Moratuwa >>> > > > Sri Lanka >>> > > > >>> > > > Blog - http://www.insightforfuture.blogspot.com/ >>> > > > LinkedIn - >>> > http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >>> > > > Twitter -http://twitter.com/AndunSLG >>> > > > >>> > > >>> > > >>> > > >>> > > -- >>> > > WBR >>> > > Maxim aka solomax >>> > > >>> > >>> > >>> > >>> > -- >>> > Regards >>> > Andun S.L. Gunawardana >>> > Undergraduate >>> > Department of Computer Science And Engineering >>> > University of Moratuwa >>> > Sri Lanka >>> > >>> > Blog - http://www.insightforfuture.blogspot.com/ >>> > LinkedIn - >>> http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >>> > Twitter -http://twitter.com/AndunSLG >>> > >>> >>> >>> >>> -- >>> WBR >>> Maxim aka solomax >>> >> >> >> >> -- >> Regards >> Andun S.L. Gunawardana >> Undergraduate >> Department of Computer Science And Engineering >> University of Moratuwa >> Sri Lanka >> >> Blog - http://www.insightforfuture.blogspot.com/ >> LinkedIn - http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 >> Twitter -http://twitter.com/AndunSLG >> >> >> >> >> > > > > -- > Regards > Andun S.L. Gunawardana > Undergraduate > Department of Computer Science And Engineering > University of Moratuwa > Sri Lanka > > Blog - http://www.insightforfuture.blogspot.com/ > LinkedIn - http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 > Twitter -http://twitter.com/AndunSLG > > > > > -- Regards Andun S.L. Gunawardana Undergraduate Department of Computer Science And Engineering University of Moratuwa Sri Lanka Blog - http://www.insightforfuture.blogspot.com/ LinkedIn - http://www.linkedin.com/pub/andun-s-l-gunawardana/34/646/703 Twitter -http://twitter.com/AndunSLG
