scieee Open visual document viewer

VNC++, control remoto desde Android

Crespo Salazar, Óscar; Jimeno Garrachón, Gorka; Valero Martín, Luis

Abstract

Hoy en día hay una gran cantidad de aplicaciones basadas en VNC para Android. Sin embargo, ninguna de estas aplicaciones son Free Software y se implementan utilizando el NDK. El objetivo de este proyecto es utilizar el potencial NDK para hacer una aplicación basada en VNC y tratar de obtener un mejor rendimiento que el resto de las aplicaciones implementadas utilizando solo el SDK y todo el código fuente será Free Software. El protocolo para comunicarse con un servidor VNC se llama RFB. Para la implementación de este protocolo en este proyecto se ha utilizado la librería libVNCServer. Esta librería facilita el control de RFB. Sin libVNCServer habría sido más difícil hacer nuestra propia librería para gestionar el protocolo. JNI se utiliza como framework para comunicar el código nativo con Java. Las tecnologías, así como el proceso utilizado para construir este software se explicará a lo largo de esta memoria.

Full text

VNC++, con ol emo o desde And oid TRABAJO FIN DE GRADO CURSO 2012-2013 ´ Osca C espo Salaza Go ka Jimeno Ga ach´on Luis Vale o Ma ´ın Di ec o An onio Sa asa Cabezuelo Depa amen o de Sis emas In o m´a icos y Compu aci´on Facul ad de In o m´a ica Uni e sidad Complu ense de Mad id Mad id, Junio de 2013 iii Licencias c 2013 All Righ s Rese ed. Es a ob a es ´a bajo una Licencia C ea i e Commons A ibuci´on-Compa i Igual 3.0 Unpo ed. Ag adecimien os Ag adecemos a Johannew Shindelin po la comple a lib e ´ıa pa a VNC que c e´o y adem´as dis ibui la de o ma lib e. Y po supues o po su ines imable y desin e esada ayuda en el Mailing-lis de la p opia lib e ´ıa, an o de ´el como de Ch is ian Beie . Tambi´en ag adece a la web s acko e low h p://s acko e low.com/, conc e a- men e la secci´on de And oid, po su ce e a ayuda con esas ine i ables dudas que su gen al desa olla c´odigo desde ce o. Tambi´en, como no, ag adece a los desa ollado es de Google, que a a ´es de su web h p://de elope .and oid.com/index.h ml y cie os ejemplos cla e, han pe mi i- do culmina es e p oyec o. Menci´on especial pa a Axel Amigo, buen amigo nues o, que nos ayud´o poniendo oz al ´ıdeo explica i o del p oyec o, a Ra´ul C espo, po hace el mon aje que an o nos ha sa is echo a odos, y po supues o, a Se gio Ba asa po el an ´as ico logo ealizado pa a la aplicaci´on. Po ´ul imo ag adece a An onio Sa asa Cabezuelo, di ec o del p oyec o, po la con- ianza deposi ada en noso os y su ines imable ayuda du an e odo el p oceso. Tambi´en ag adecemos a odos los p o eso es de la Facul ad de In o m´a ica de la Uni e sidad Com- plu ense de Mad id po p opo ciona nos du an e odos es os a˜nos los conocimien os nece- sa ios pa a el desa ollo de es e p oyec o. ii Abs ac Nowadays he e a e a lo o VNC based applica ions o And oid. None heless, none o hese applica ions a e F ee So wa e and a e implemen ed using he NDK. The poin o his p ojec is o use he NDK po en ial o make a VNC based applica ion and y o ob ain a be e pe o mance han he o he applica ions implemen ed using only he SDK and all he sou ce code will be F ee So wa e. The p o ocol o comunica e wi h a VNC se e is called RFB. To implemen ing his p o ocol in his p ojec has been used he libVNCSe e lib a y. This lib a y acili a es he con ol o RFB. Wi hou libVNCSe e i would be mo e di icul o make ou own lib a y o manage he p o ocol. JNI is used as he amewo k o comunica e he na i e code wi h Ja a. The echnologies, as well as he p ocess used o buil his so wa e is going o be explained along his epo . Keywo ds VNC, And oid, C++, C, NDK, SDK, JNI, RFB. ix Resumen Hoy en d´ıa hay una g an can idad de aplicaciones basadas en VNC pa a And oid. Sin emba go, ninguna de es as aplicaciones son F ee So wa e y se implemen an u ilizando el NDK. El obje i o de es e p oyec o es u iliza el po encial NDK pa a hace una aplicaci´on basada en VNC y a a de ob ene un mejo endimien o que el es o de las aplicaciones implemen adas u ilizando s´olo el SDK y odo el c´odigo uen e se ´a F ee So wa e. El p o ocolo pa a comunica se con un se ido VNC se llama RFB. Pa a la implemen- aci´on de es e p o ocolo en es e p oyec o se ha u ilizado la lib e ´ıa libVNCSe e . Es a lib e ´ıa acili a el con ol de RFB. Sin libVNCSe e hab ´ıa sido m´as di ´ıcil hace nues a p opia lib e ´ıa pa a ges iona el p o ocolo. JNI se u iliza como amewo k pa a comunica el c´odigo na i o con Ja a. Las ecnolog´ıas, as´ı como el p oceso u ilizado pa a cons ui es e so wa e se explica ´a a lo la go de es a memo ia. Palab as cla e VNC, And oid, C++, C, NDK, SDK, JNI, RFB. 2 Cap´ı ulo 1 In oducci´on El desa ollo de las edes de elecomunicaciones ha pe mi ido que p og esi amen e el con ol emo o de un o denado pase de me as e minales de ex o a los esc i o ios emo os de hoy en d´ıa. La ecnolog´ıa de esc i o io emo o pe mi e la cen alizaci´on de aplicacio- nes que no malmen e se ejecu a ´ıan en el en o no de usua io. G acias a es a ecnolog´ıa el en o no de usua io (clien e) se con ie e en una simple e minal de en ada/salida. Todos los e en os de pulsaci´on de eclas y mo imien os del a ´on se ansmi en desde el clien e a un se ido donde la aplicaci´on los p ocesa como si se a asen de e en os locales. La imagen de la pan alla se de uel e al clien e y de es a mane a se puede con ola desde el e minal clien e la m´aquina donde se encuen a la aplicaci´on se ido . Es e p oyec o se cen a ´unicamen e en la ealizaci´on de una aplicaci´on clien e pa a And oid. De al mane a que la aplicaci´on se ido no es ´a desa ollada en es e p oyec o. Aunque m´as adelan e se p o undiza ´a en cuales son los obje i os conc e os de es e p o- yec o, con iene acla a que el obje i o e a desa olla un clien e VNC pa a And oid, que u iliza ´a el NDK y que ue a de so wa e lib e, ya que en la ac ualidad no exis e ninguno que cumpla es os dos equisi os. Exis en di e en es p o ocolos de comunicaci´on en e la aplicaci´on clien e y la aplicaci´on se ido . Es e p oyec o se ha desa ollado u ilizando el p o ocolo de comunicaci´on Remo e F ame Bu e (RFB), u ilizado po odos los clien es y se ido es VNC. De es a mane a la aplicaci´on se ´a compa ible con cualquie se ido VNC ins alado en cualquie e minal. An es de p o undiza m´as en c´omo se han a on ado los obje i os del p oyec o con- iene es ablece cie os conocimien os b´asicos ela i os al dominio de es as aplicaciones. Comenza emos explicando algunos concep os que se han u ilizado an es, ales como VNC, RFB, And oid, e c. 1.1. Concep os 1.1.1. Esc i o io emo o Un esc i o io emo o es una ecnolog´ıa que pe mi e a un usua io con ola desde un e minal g ´a ico (clien e) o o e minal g ´a ico (se ido ). X-Window ue el p ime esc i o- io emo o desa ollado po el Massachuse s Ins i u e o Technology (MIT) en la d´ecada de los ochen a [1]. 3 4Cap´ ı ulo 1. In oducci´ on 1.1.2. VNC VNC son las siglas en ingl´es de Vi ual Ne wo k Compu ing [2]. Es un sis ema de esc i o io emo o que u iliza el p o ocolo Remo e F ame Bu e (RFB) pa a con ola emo amen e o a m´aquina. Es ´a basado en una a qui ec u a clien e-se ido , donde la m´aquina con la aplicaci´on clien e es la que con ola a la m´aquina con la aplicaci´on se - ido . VNC ansmi e los e en os de a ´on y eclado desde el clien e al se ido y ´es e de uel e las ac ualizaciones de pan alla en la o a di ecci´on a a ´es de una ed de comu- nicaciones. VNC es independien e del sis ema ope a i o, es deci , un clien e VNC ejecu ado en una m´aquina Windows pod ´ıa con ola un se ido ejecu ado en una m´aquina Linux. En de ini i a, se pod ´ıa con ola cualquie sis ema ope a i o desde cualquie sis ema ope a i o siemp e que ambos sean compa ibles con VNC. 1.1.3. RFB RFB son las siglas en ingl´es de Remo e F ame Bu e . Es un p o ocolo de comunicaci´on pa a el acceso emo o a in e aces g ´a icas de usua io. Como abaja a ni el de amebu e es aplicable a odos los sis emas de en anas (X11, Windows, Macin osh). RFB es el p o ocolo usado en VNC [3]. 1.1.4. And oid And oid es un sis ema ope a i o basado en Linux, dise˜nado p incipalmen e pa a Sma p- hones y Table s. Inicialmen e ue desa ollado po And oid Inc, pe o inalmen e Google lo comp ´o en 2005. Fue p esen ado en 2007 jun o con la undaci´on Open Handse Alliance y el p ime m´o il con sis ema ope a i o And oid sali´o al me cado en 2008. La mayo ´ıa del c´odigo de And oid es ´a libe ado bajo una licencia Apache, licencia lib e y de c´odigo abie o. No obs an e no es ´a libe ado comple amen e, po lo an o no se puede deci que And oid sea un sis ema ope a i o lib e. Uno de sus pun os ue es es la acilidad pa a desa olla aplicaciones g acias a las he amien as que p opo ciona Google. Es as aplicaciones no malmen e es ´an esc i as en Ja a y se desa ollan u ilizando el And oid SDK, pe o ambi´en se pueden cons ui aplicaciones esc i as en C/C++ usando el And oid NDK [4]. 1.1.5. And oid SDK SDK son las siglas en ingl´es de So wa e De elopmen Ki . El SDK p opo cina las APIs y he amien as de desa ollo necesa ias pa a cons ui , es ea y depu a aplicaciones pa a And oid [5]. 1.1.6. And oid NDK NDK son las siglas en ingl´es de Na i e De elopmen Ki . El NDK es un conjun o de he amien as que pe mi en desa olla pa e de la aplicaci´on pa a And oid con lenguajes de c´odigo na i o como C o C++ [6]. 1.1. Concep os 5 1.1.7. JNI JNI son las siglas en ingl´es de Ja a Na i e In e ace. Es un amewo k de p og amaci´on que pe mi e a c´odigo Ja a llama y se llamado desde apliaciones na i as y lib e ias esc i as en o o lenguajes como pueden se C, C++ o ensamblado [7]. JNI p opo ciona odo lo necesa io pa a que la comunicaci´on en e el SDK y el NDK sea posible. G acias a ´el es posible cons ui aplicaciones en And oid u ilizando c´odigo na i o. 1.1.8. Tigh encoding Tigh es un ipo de codi icaci´on m´as compac ada, es muy e icien e y es ´a op imizado pa a conexiones con poco ancho de banda. Tigh incluye an o la e iciencia de comp esi´on sin p´e didas, como opcionales o mas de comp esi´on con pe didas pa a JPEG [8]. 1.1.9. ZRLE encoding ZRLE, es un ipo de codi icaci´on compac a y e icien e. Es ´a op imizado pa a conexiones con poco ancho de banda y u iliza la lib e ´ıa ZLib pa a comp imi los da os. 1.1.10. Gi Es un so wa e de con ol de e siones dise˜nado po Linux o als[9][10]. Se cen a en la elocidad y la e iciencia. Inicialmen e ue cons uido pa a el desa ollo del Ke nel de Linux pe o desde en onces cada ez m´as p oyec os lo han ido adop ando. 1.1.11. Wi eSha k Wi eSha k es un so wa e analizado de p o ocolo de ed (sni e ) licenciado bajo GPL 2 [11]. Es uno de los sni e m´as impo an es y comple os, en ´el con ibuyen ex- pe os en edes de odo el mundo. 1.1.12. F ee So wa e F ee So wa e del ingl´es so wa e lib e. Es el so wa e que pe mi e al usua io compa i , es udia y modi ica [12]. Todo so wa e lib e debe ga an iza las libe ades de usa el p og ama con cualquie p op´osi o, es udia y modi ica el p og ama, dis ibui copias del p og ama y, po ´ul imo, la libe ad de hace p´ublicas las modi icaciones que se hayan ealizado. 1.1.13. GPL GPL son las siglas en ingl´es de Gene al Public License [13]. Es una licencia de c´odigo lib e edac ada po la F ee So wa e Funda ion. El c´odigo bajo es a licencia es c´odigo lib e ya que es a licencia ga an iza las cua o libe ades de ´es e, que son: usa el p og ama con cualquie p op´osi o, es udia y modi ica el p og ama, dis ibui copias del p og ama y po ´ul imo la libe ad de hace p´ublicas las modi icaciones que se hayan ealizado. 6Cap´ ı ulo 1. In oducci´ on 1.2. Mo i aciones La mo i aci´on p incipal pa a la ealizaci´on de es e p oyec o e a el desa ollo de algo nue o. As´ı, jun o con nues o in e ´es po el desa ollo de aplicaciones And oid usando c´odigo na i o, nos dimos cuen a de que no exis ´ıa ninguna aplicaci´on de esc i o io emo o que usase es a ecnolog´ıa. La ealizaci´on de es e p oyec o supon´ıa un desa ´ıo de ca a a la in e conexi´on en e el c´odigo en C++ y Ja a ya que pa a ello ue necesa io ap ende a hace compilaciones c uzadas, a pa e de ambi´en ap ende a u iliza JNI. 1.3. Obje i os Los obje i os de es e p oyec o son p incipalmen e dos, el desa ollo de una aplicaci´on de esc i o io emo o pa a And oid usando el NDK y que dicha aplicaci´on en su o alidad sea so wa e lib e. El obje i o de ealiza la aplicaci´on no e a s´olo el hecho de cons ui una aplicaci´on que uncionase co ec amen e. La aplicaci´on en´ıa que se usable y e icien e. Es o ´ul imo lo hemos log ado, ya que g acias al uso de c´odigo na i o se ha conseguido que la aplica- ci´on, no s´olo sea e icien e si no que iene ni eles de e iciencia compa ables con los de la aplicaci´on o icial de los c eado es del p o ocolo. En cuan o a la usabilidad, la aplicaci´on p opo ciona muchas opciones como, po ejemplo, es ablece conexiones ci adas y en ia combinaciones de eclas. En cuan o al so wa e lib e, odo el c´odigo ha sido licenciado bajo una licencia GPL e si´on 3, po lo an o el so wa e de la aplicaci´on ga an iza las cua o libe ades que odo so wa e debe ene pa a se conside ado como al. Conside amos impo an e y po eso es ´a en es a secci´on de obje i os, el ca ´ac e lib e del so wa e, ya que el so wa e lib e supone un a ance muy impo an e con espec o al mundo del so wa e p i a i o, c eando una comunidad de usua ios y p og amado es que in e ac ´uan en e s´ı mejo ando el desa ollo del so wa e. Cap´ı ulo 2 Es ado del a e Como e e encias ac uales pa a ealiza es e p oyec o, y ob ene ideas de aplicaciones en ocadas en el mismo campo, se han u ilizado los siguien es clien es pa a And oid: 2.1. VNC Viewe (RealVNC) VNC Viewe (RealVNC)[14] pe enecien e a la compa˜n´ıa RealVNC. Inicialmen e VNC su gi´o en el Oli e i & O acle Resea ch Lab (ORL3), siendo desa ollado po T is an Richa dson (in en o ), Andy Ha e (di ec o del p oyec o), Quen in S an o d-F ase y James Wea he all. Unos a˜nos despu´es, a ios de es os desa ollado es c ea ´ıan RealVNC con la idea de segui con es e p oyec o so wa e. Al no se una aplicaci´on de c´odigo abie o, es di ´ıcil sabe el ipo de implemen aci´on que lle a a cabo. Posee una in e az g ´a ica muy usable y un endimien o ´op imo. Pa a el con ol del o denado u iliza la pan alla a modo de ouchpad, es o es, el mo imien os en la pan alla son los mo imien os que ha ´a el a ´on. Es o p opo ciona un manejo len o pe o ex ema- damen e p eciso. Po o o lado RealVNC no almacena las cons ase˜nas sino que p egun a al usua io po ella cuando conec a a un se ido que la equie a. Ha sido una de las aplicaciones de e e encia, an o po su in e az como po su ´op imo endimien o. Como ya se ha dicho con an e io idad es de c´odigo ce ado, as´ı que ue imposible abaja sob e ella. 7 8Cap´ ı ulo 2. Es ado del a e 2.2. And oid- nc- iewe (And oidVNC) And oid- nc- iewe (And oidVNC)[16] es un p og ama lib e y de c´odigo abie o de con ol emo o pa a disposi i os And oid. Es un p oyec o desa ollado a pa i de una ama inicial de o a aplicaci´on llamada igh VNC. Es a bajo licencia GPL 2 y iene un eposi o io ac i o en google h p://code.google.com/p/and oid- nc- iewe /. Posee una in e az g ´a ica pob e y una ges i´on de conexiones poco cla a. Pa a el con- ol emo o del o denado o ece una amplio abanico de posibilidades cub iendo cualquie posibilidad al espec o. En el apa ado de la segu idad And oidVNC almcena las con ase˜nas en la Base de Da os sin ci a siendo ulne able a a aques, Al se una aplicaci´on de so wa e lib e hemos podio e y ap ende mucho de su c´odigo y ha sido una de las aplicaciones de e e encia ya que o ece un endimien o muy bueno. Nos ue imposible abaja sob e ´el ya que es ´a cons uida o almen e sob e SDK y nues o obje i o es u iliza la po encia del NDK. 2.3. Mul iVNC Mul iVNC[15] es un p oyec o de so wa e lib e bajo licencia GPL 2, basado en and oid- nc- iewe y desa ollado po Ch is ian Beie . Incluye sopo e pa a a ias codi icaciones, as´ı como el uso de Ze ocon (Ze o Con igu a ion Ne wo king) pa a ayuda a c ea de o ma au om´a ica una ed IP sin necesidad de con igu aciones o se ido es especiales. Al igual que And oidVNC posee una in e az pob e y, aunque mejo , una ges i´on de conexiones no demasiado cla o. Pa a la ep esen aci´on u iliza acele aci´on po ha dwa e median e GPU. Respec o al con ol u iliza un sis ema simila a RealVNC. En el aspec o de las con ase˜na p esen a un uncionamien o semejan e a And oidVNC. Es a aplicaci´on ha enido una ele ancia meno en el p oyec o ya que no nos con enc´ıa su endimien o en m´o iles de baja gama, se ha usado pa a obse a como esol ´ıan cie os aspec os y como compa a i a de endimien o. Cap´ı ulo 3 En o no de desa ollo y banco de p uebas 3.1. En o no de desa ollo Todo el p oyec o ha sido desa ollado bajo el Sis ema ope a i o Linux Min Debian Edi ion 64 bi s, bajo las opciones de esc i o io an o Ma e como X ce. La p incipal he amien a de desa ollo u ilizada ha sido Eclipse Juno, con los en o - nos de desa ollo in eg ados an o pa a C/C++ como pa a Ja a, ya que el p oyec o ha necesi ado de es os lenguajes. JDK: e si´on 1.6 64 bi s. SDK: e si´on and oid-sdk- 21.1-linux. NDK: e si´on ac ual and oid-ndk- 8d, aunque a lo la go del p oyec o ue necesa io ac ualiza a es a e si´on m´as ecien e. And oid: e si´on m´ınima de desa ollo And oid 4.0 (API 14). Aunque en un inicio se op ´o po desa olla pa a And oid 2.3.3 (API 10) po ene mayo cuo a de me cado, nos dimos cuen a al i desa ollando que la 4.0 nos da ´ıa mayo es bene icios u u os. Gi : sis ema de con ol de e siones pa a el abajo en equipo. Egi : plugin de Eclipse usado pa a in e ac ua con el eposi o io p´ublico del p oyec o en e los dis in os in eg an es. Doxygen: plugin que gene a la documen aci´on del c´odigo inal, ya que conside amos m´as comple o que el ja adoc de se ie. ADT: And oid De elope s Tools e si´on 22.0.1, plugin de Eclipse pa a el desa ollo de aplicaciones And oid. LaTeX: he amien a usada pa a la composici´on del ex o de la memo ia. G acias es as he amien as hemos podido abaja sob e un en o no uni icado, ya que eclipse daba odas las posibilidades sin sali de ´el. Po un lado pe mi ´ıa esc ibi el c´odigo en Ja a y C/C++ desde la misma he amien a, as´ı mismo, pe mi ´ıa el desa ollo sob e And oid g acias al plugin ADT y la ges i´on del c´odigo median e Gi de una o ma sencilla g acias a Egi . 9 10 Cap´ ı ulo 3. En o no de desa ollo y banco de p uebas 3.2. Banco de p uebas Las p uebas de depu aci´on de la aplicaci´on se han ealizado en dos e minales m´o iles con dis in as esoluciones y especi icaciones gene ales pa a obse a el impac o an o en e minales de gama media/baja, como e minales de al a gama. Samsung Galaxy S3 con And oid 4.2.2 Jelly Bean. Samsung Galaxy Mini 2 con And oid 4.1.2 Jelly Bean. Como se ido es VNC se han usado: x11 nc, con codi icaci´on SSL y sin ella. RealVNC, con cla e y sin ella. Cap´ı ulo 4 Tecnolog´ıas allidas En es e apa ado se desc ibi ´an algunas de las ecnolog´ıas que se pensa on usa en un p incipio y que po un mo i o u o o al inal se desecha on. 4.1. Simple Di ec Media Laye Simple Di ec Media Laye [17][18], o m´as com´unmen e conocida po sus siglas SDL, es una lib e ´ıa desa ollada en C y licenciada y dis ibuida bajo licencia LGPL, p opo ciona una se ie de unciones pa a la ges i´on de dibujos e im´agenes en dos dimensiones. Esc i a o iginalmen e po Sam La inga. Du an e el p oceso de desa ollo del p oyec o, una de las ecnolog´ıas po las que se op a on ue SDL, dada las acilidades y po encia que o ec´ıa pa a el a amien o y ende- izado de la imagen. Sin emba go, du an e la inclusi´on del mismo en el p oyec o su gie on dos p oblemas que nos decidie on a abandona lo. El p ime mo i o ue que la ´unica e si´on con inuada y con sopo e pa a And oid e a SDL 2.0, la cual se encon aba en ase de desa ollo y las unciones p incipales pod´ıan cambia en mi ad del desa ollo. Exis ´ıa una e si´on no o icial y descon inuada de la mis- ma, que e a SDL 1.2, pe o en e los e o es conocidos es aban el uso del modo ´ıdeo, que e a esencial en el p oyec o, y dado que es aba descon inuado, nunca se hubie a a eglado. Po o o lado, el endimien o ob enido, una ez acoplado al p oyec o, ue muy pob e, llegando al caso de que el se ido expulsaba la conexi´on. Adem´as dado el uncionamien o de SDL, se dibujaba s´olo la pa e que se e´ıa de la pan alla, la usabilidad al mo e se po la misma, eniendo que edibuja con inuamen e la imagen, hizo in iable su uso. 11 18 Cap´ ı ulo 5. Tecnolog´ ıas usadas Reco ido del ec o : Aunque la ep esen aci´on de la in o maci´on es un ec o lineal, en ealidad el eco ido del mismo se ealiza como si de un ec o bidimensio- nal se a ase. De al o ma que pa a pasa de una ila a o a se ha ´ıa: Anchu a*bpp En cualquie caso, nos encon a ´ıamos con un eco ido del o den O(n2) (cos e cuad ´a ico). Pa a ecoge la in o maci´on de la imagen, se eco e el ec ´angulo que ha su ido cambios y se copia di ec amen e en el ec o inal. Pa a hace la copia se usa la unci´on de C memcpy, dada su e iciencia copiando bloques de by es. 5.2.3. Can as pa a la ep esen aci´on Pa a la ep esen aci´on de la imagen se ha usado Can as pa a And oid, usando sus unciones de dibujado de Bi map. Los dos m´e odos de Can as usados pa a dibuja el bi map son: d awBi map ( i n [ ] c olo s , i n o s e , i n s i de , in x , in y , in wid h , in heigh , boolean hasAlpha , Pain pain ) Median e es e m´e odo es posible dibuja un bi map a pa i de su in o maci´on de p´ıxeles, almacenada en colo s, se usa pa a ep esen a los da os de la imagen seg´un se modi ican. d awBi map ( Bi map bi map , Rec s c , Rec F ds , Pain pain ) Median e ´es e dibujamos un bi map, pas´andole el bi map ya c eado como pa ´ame o. Cada uno de los m´e odos an e io es es usado en dos si uaciones y con ex o dis in os, es necesa io usa ambos, como e emos m´as adelan e, pa a una ´op ima ep esen aci´on. Los dos con ex os dis in os a los que hace en e la aplicaci´on son: Es ado no mal: sucede siemp e que hay una ac ualizaci´on en la imagen y siemp e y cuando el usua io no se es ´e desplazando po la pan alla o haciendo zoom. En es e caso la imagen se ep esen a ´a median e su ec o de p´ıxeles. El usua io se mue e po la imagen o hace zoom: cuando el usua io se desplaza a a ´es de la imagen o hace zoom, es necesa io c ea un bi map con la in o maci´on ac ual de la imagen, ya que en caso con a io, ob end ´ıamos un p´esimo endimien o po dos mo i os: •Si us´asemos la ep esen aci´on a pa i de su in o maci´on de p´ıxeles, en cada p og esi´on po la imagen ha ´ıa al a edibuja la imagen, consiguiendo un mo- imien o o zoom len o. •Como es a ´ıamos con inuamen e edibujando la imagen, y adem´as, en cada ep esen aci´on And oid c ea ´ıa un bi map empo al, p o oca ´ıamos un al o consumo de CPU. 5.2. Aplicaci´ on 19 De al o ma, al c ea un bi map, el mo imien o po la imagen es luido. El ´unico pun o a conside a es la op imizaci´on de cuando c ea y des ui es e bi map, ya que la c eaci´on de bi maps es un p oceso pesado y que equie e de muchos ecu sos. As´ı pues los pun os en los que se des uye o se ma ca pa a des ui el bi map son: •Cuando el usua io haga click sob e la imagen, en es e pun o se conside a que el usua io in en a in e ac ua con el se ido , po lo an o, es necesa io des ui el bi map y man ene ac ualizada la imagen en odo momen o. •En el caso de que el usua io deje de mo e se po la pan alla, al menos, du an e medio segundo o deje de hace zoom. En es e caso es con enien e des ui la imagen en pos de consegui una imagen ac ualizada del se ido . El mo i o po el cual se espe a medio segundo, es con el in de no in e umpi el mo imien o del usua io, es deci , si se des uyese el bi map en el momen o que le an a el dedo de la pan alla, al ol e a mo e se se p oduci ´ıa una len i ud has a que se ol iese a c ea el nue o bi map. Adem´as as´ı, op imizamos la c eaci´on de bi map y educimos el uso de CPU. El p oblema que encon amos en e a o as soluciones, a la ho a de ac ualiza la imagen, es el hecho de que la pa e na i a (C++) ac ualiza los da os de la imagen di ec- amen e en el ec o , si po el con a io, odo se hubiese desa ollado en Ja a, se pod ´ıa habe ac ualizado la in o maci´on sob e un bi map ya c eado, de al o ma que se aho- a ´ıa el consumo de CPU de i ado de la c eaci´on, aunque se pe de ´ıa endimien o en la ac ualizaci´on. 20 Cap´ ı ulo 5. Tecnolog´ ıas usadas Cap´ı ulo 6 Especi icaciones En es e cap´ı ulo se desc ibe la cons ucci´on de la aplicaci´on. P ime o se expond ´an las especi icaciones de equisi os an o ex e nos, como uncionales. Despu´es en el siguien e apa ado se explica ´an los diag amas UML del c´odigo, jun o con explicaciones de odo el lujo del p og ama. 6.1. Especi icaci´on de equisi os Los equisi os de la aplicaci´on son: 6.1.1. In e aces ex e nos En es a secci´on se indican los equisi os ex e nos a la aplicaci´on. In e aces de usua io: La in e az de uso p opo ciona odo lo necesa io pa a con ola la aplicaci´on en su o alidad. In e aces de ha dwa e: Se debe dispone de un disposi i o m´o il y un o denado . In e aces de so wa e: La e si´on de And oid del disposi i o m´o il debe se la 4.0 o supe io . En la m´aquina emo a se debe dispone de una aplicaci´on VNC de ipo se ido . In e aces de comunicaci´on: Tan o el clien e como el se ido deben dispone de una conexi´on a In e ne o es a ambos en la misma ed local. 21 22 Cap´ ı ulo 6. Especi icaciones 6.1.2. Funciones Los siguien es equisi os uncionales de inen las acciones que deben ene luga en el so wa e p ocesando las en adas y gene ando las salidas. C ea conexi´on: P io idad: Al a. Es abilidad: Al a. Desc ipci´on: C ea una nue a conexi´on y la a˜nade a la lis a de conexiones. En ada: Nomb e de la conexi´on, IP, pue o, con ase˜na y calidad de imagen. Salida: La conexi´on se a˜nade a la lis a y se conec a. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Acceso a la Base de Da os. Acci´on: C ea una nue a conexi´on. P econdici´on: Nomb e de conexi´on no epe ida, IP ´alida y pue o en un ango ´alido. Pos condici´on: La conexi´on se a˜nade a la lis a de conexiones. E ec os la e ales: N/A. Edi a conexi´on: P io idad: Media. Es abilidad: Al a. Desc ipci´on: Se edi an los da os de una de e minada conexi´on. En ada: Nomb e de la conexi´on, IP, pue o, con ase˜na y calidad de imagen. Salida: La conexi´on con los da os modi icados. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Acceso a la Base de Da os. Acci´on: Edi a los da os de una conexi´on. P econdici´on: IP ´alida y pue o en un ango ´alido. Pos condici´on: Los da os de la conexi´on se modi ican. E ec os la e ales: N/A. 6.1. Especi icaci´ on de equisi os 23 Bo a conexi´on: P io idad: Media. Es abilidad: Al a. Desc ipci´on: Se elimina una conexi´on. En ada: E en o usua io. Salida: La conexi´on se elimina de la aplicaci´on. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Acceso a la Base de Da os. Acci´on: Elimina una conexi´on. P econdici´on: N/A. Pos condici´on: La conexi´on se bo a de la aplicaci´on. E ec os la e ales: Si la conexi´on es ´a en a o i os se bo a ´a ambi´en ah´ı. Ve in o maci´on de la conexi´on: P io idad: Baja. Es abilidad: Al a. Desc ipci´on: Mues a la in o maci´on de una conexi´on. En ada: E en o usua io. Salida: Los da os de la conexi´on. O igen: Usua io. Des ino: Usua io. Necesi a: Acceso a la Base de Da os. Acci´on: Mues a los da os de una conexi´on. P econdici´on: N/A Pos condici´on: Se mues an los da os de una conexi´on. E ec os la e ales: N/A. 24 Cap´ ı ulo 6. Especi icaciones A˜nadi conexi´on a a o i os: P io idad: Baja. Es abilidad: Al a. Desc ipci´on: A˜nade una conexi´on a la lis a de a o i os del usua io. En ada: E en o usua io. Salida: La conexi´on se a˜nade a la lis a de a o i os. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Acceso a la base de da os. Acci´on: A˜nade la conexi´on a la lis a de a o i os. P econdici´on: N/A. Pos condici´on: La conexi´on se a˜nade a a o i os. E ec os la e ales: N/A. Bo a conexi´on de a o i os: P io idad: Baja. Es abilidad: Al a. Desc ipci´on: Bo a una conexi´on de la lis a de a o i os. En ada: E en o usua io. Salida: La conexi´on se elimina de a o i os. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Acceso a la base de da os. Acci´on: Elimina una conexi´on de la lis a de a o i os. P econdici´on: N/A. Pos condici´on: La conexi´on se bo a de a o i os. E ec os la e ales: N/A. 6.1. Especi icaci´ on de equisi os 25 Ve lis a de conexiones: P io idad: Al a. Es abilidad: Al a. Desc ipci´on: Se mues an odas las conexiones ecien es. En ada: E en o usua io. Salida: La lis a de conexiones ecien es. O igen: Usua io. Des ino: Usua io. Necesi a: Acceso a la base de da os. Acci´on: Se mues an las conexiones ecien es. P econdici´on: N/A Pos condici´on: Se mues a la lis a de conexiones ecien es. E ec os la e ales: N/A. Ve lis a de conexiones a o i as: P io idad: Baja. Es abilidad: Al a. Desc ipci´on: Se mues an odas las conexiones a o i as. En ada: E en o usua io. Salida: La lis a de conexiones a o i as. O igen: Usua io. Des ino: Usua io. Necesi a: Acceso a la base de da os. Acci´on: Se mues an las conexiones a o i as. P econdici´on: N/A Pos condici´on: Se mues a la lis a de conexiones a o i as. E ec os la e ales: N/A. 26 Cap´ ı ulo 6. Especi icaciones Ab i men´u p incipal: P io idad: Baja. Es abilidad: Al a. Desc ipci´on: Se ab e el men´u p incipal. En ada: E en o usua io. Salida: Se mues a el men´u. O igen: Usua io. Des ino: Usua io. Necesi a: N/A. Acci´on: Se mues a el men´u p incipal. P econdici´on: N/A Pos condici´on: Se mues a el men´u p incipal. E ec os la e ales: N/A Conec a se: P io idad: Al a. Es abilidad: Al a. Desc ipci´on: Se conec a al se ido especi icado en los da os de la conexi´on. En ada: Da os de la conexi´on y e en o usua io. Salida: Conexi´on con el se ido . O igen: Usua io. Des ino: Usua io. Necesi a: N/A. Acci´on: Se conec a con el se ido emo o. P econdici´on: El se ido iene que ene ejecu ´andose una aplicaci´on VNC. Pos condici´on: El clien e se conec a con el se ido . E ec os la e ales: N/A. 6.1. Especi icaci´ on de equisi os 27 Desconec a se: P io idad: Al a. Es abilidad: Al a. Desc ipci´on: Se desconec a del se ido al que se es aba conec ado. En ada: E en o usua io o desconexi´on del se ido Salida: Desconexi´on con el se ido . O igen: Usua io o se ido . Des ino: Usua io. Necesi a: Es a conec ado. Acci´on: Se desconec a del se ido emo o. P econdici´on: Se debe es a conec ado pa a pode desconec a se. Pos condici´on: El clien e se desconec a del se ido . E ec os la e ales: N/A. Hace click: P io idad: Al a. Es abilidad: Al a. Desc ipci´on: Se en ´ıa la o den de pulsa el bo ´on izquie do del a ´on. En ada: E en o usua io. Salida: N/A. O igen: Usua io. Des ino: Aplicaci´on. Necesi a: Es a conec ado. Acci´on: Se en ´ıa la o den de hace click. P econdici´on: Se debe es a conec ado. Pos condici´on: Se en ´ıa la o den de hace click. E ec os la e ales: N/A. 34 Cap´ ı ulo 6. Especi icaciones es. a u eam. ncpp.con olle .Lis F agmen Tab + Lis F agmen Tab() + onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View + onS a () + onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long) + dele eUse () + edi ingUse () + e eshFa o i es(use : es. a u eam. ncpp.model.sql.Connec ion) + ge O() : Objec + se O(o : Objec ) + ge Use Lis () : A ayLis <Connec ion> + se Use Lis (use Lis : A ayLis <Connec ion>) es. a u eam. ncpp.con olle .Lis F agmen TabFa + Lis F agmen TabFa () + onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View + onS a () + onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long) + dele eUse () + edi ingUse () + ge O() : Objec + se O(o : Objec ) + ge Use Lis () : A ayLis <Connec ion> + se Use Lis (use Lis : A ayLis <Connec ion>) es. a u eam. ncpp. iew.Adap e + Adap e (ac : Ac i i y, u : A ayLis <Connec ion>) + ge Coun () : in + ge I em(posi ion : in ) : Objec + ge I emId(posi ion : in ) : long + ge View(posi ion : in , con e View : View, pa en : ViewG oup) : View + dele eRow( ow : es. a u eam. ncpp.model.sql.Connec ion) + ge Lis () : A ayLis <Connec ion> + se Lis (lis : A ayLis <Connec ion>) es. a u eam. ncpp. iew.DialogOp ions + newIns ance(lis ene : Supe Lis ene ) : DialogOp ions + onC ea eDialog(sa edIns anceS a e : Bundle) : Dialog -adap e -adap e Diag am: lis asUML Page 1 Figu a 6.3: Diag ama Lis as de Conexiones Las clases Lis F agmen Tab y Lis F agmen TabFa (Ve Figu a 6.3) son las enca ga- das de mos a las lis as de conexiones y conexiones a o i as espec i amen e. La clase SlideLis F agmen (Ve Figu a 6.4) se enca ga de cons ui el men´u la e al y es llamada desde Can asAc i i y. Can asAc i i y (Ve Figu a 6.4) es la enca gada de cap u a odos los e en os que se p oduzcan en el clien e, mos a la imagen del esc i o io y comunica se con la pa e na i a. Pa a dibuja la imagen se apoya en la clase Can asView (Ve Figu a 6.4). Pa a Comuni- ca se con la pa e na i a se apoya en VncB idgeJNI (Ve imagen 6.5). La comunicaci´on en e el VncB idgeJNI y el Can as Ac i i y se ealiza median e el pa ´on obse e (Ve igu a 6.4 y 6.5). 6.2. Diag amas de clases 35 es. a u eam. ncpp.model.Obse ableCan as + Obse ableCan as() + addObse e (obse e : Obse e Can as) + no i yIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in ) + no i yRed aw(x : in , y : in , wid h : in , heigh : in ) + no i yFinish() es. a u eam. ncpp. iew.Can asView + Can asView(con ex : Con ex , a s : A ibu eSe ) + ge RealHeigh () : in + ge RealWid h() : in + ge Scale() : floa + se Scale(scale : floa , scaleX : floa , scaleY : floa ) + s a D ag() + endD ag() + eD aw() + ini Can as(da a : in [], offse : in , s ide : in , x : in , y : in , wid h : in , heigh : in ) es. a u eam. ncpp. iew.SlideLis F agmen + onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View + onAc i i yC ea ed(sa edIns anceS a e : Bundle) + onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long) es. a u eam. ncpp.con olle .Can asAc i i y + onConfigu a ionChanged(newConfig : Configu a ion) + onMenuI emSelec ed( ea u eId : in , i em : MenuI em) : boolean + onKeyDown(keyCode : in , e : KeyE en ) : boolean + dispa chKeyE en (e en : KeyE en ) : boolean + onKeyUp(keyCode : in , e : KeyE en ) : boolean + onTouchE en (e en : Mo ionE en ) : boolean + onUpMouse(e : Mo ionE en ) : boolean + upda eRed aw(x : in , y : in , wid h : in , heigh : in ) + upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in ) + upda eFinish() + showKeyboa d() + sendTex Dialog() : Dialog + passwo dNeededDialog() : Dialog + c ea eSe e No FoundDialog() : Dialog + exi Dialog() : Dialog + se e In e up ConexionDialog() : Dialog + imeExceededDialog() : Dialog + comboE en sDialog() : Dialog + unc ionKeysDialog() : Dialog + openHelpDialog() : Dialog + cen e ImageCan as() «in e ace» es. a u eam. ncpp.model.Obse e Can as + upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in ) + upda eRed aw(x : in , y : in , wid h : in , heigh : in ) + upda eFinish() -obse e -can as Diag am: Can as Page 1 Figu a 6.4: Diag ama Can as La ep esen aci´on de la imagen se ha ealizado con can as, en la clase Can asView (Ve Figu a 6.4). Pa a da mejo sensaci´on de luidez a la ho a de mo e se po la imagen se u iliza un Bi map auxilia en luga de siemp e el mismo. Cuando el p og ama en a en modo d ag, se c ea el Bi map auxilia y se inicializa con el alo ac ual de la imagen. Si el usua io es ´a mo iendose po la imagen (modo d ag) el m´e odo onD aw de can as mos a ´a el Bi map auxilia . i ( ! d ag ){ can as . d awBi map ( da a , o s e , s i de , x , y , wid h , heigh , a l s e , n u ll ) ; } e l s e { can as . d awBi map ( bi map , bi mapRec , bi mapRec , null ) ; } 36 Cap´ ı ulo 6. Especi icaciones En el momen o que el usua io deja de mo e se sal a un ime c eado en un hilo apa e, de al mane a que du an e 0.5 segundos la imagen no se des uye (Ve secci´on 5.2.3). La ac ualizaci´on de la imagen nos llega desde el c´odigo na i o (Ve secci´on 6.2.2). Cuando llega una no i icaci´on desde C++ de que la imagen ha sido modi icada, el can as se in alida y se edibuja. Si Can asAc i i y de ec a un e en o de Sc oll (mo imien o po la pan alla), se llama al m´e odo doSc oll. Es e m´e odo calcula cuan os p´ıxeles se ha mo ido en los ejes X e Y, comp obando que no se salga de la imagen. Una ez calculados se llama al m´e odo de can as sc ollTo pa a que modi ique la imagen. i (mo eX != 0 | | mo eY != 0){ ealX = ealX + ( i n )mo eX ; ealY = ealY + ( i n )mo eY can as . sc oll To (( i n )( ealX ∗scale Fac o ) , ( i n ) ( ealY ∗scaleFac o ) ) ; } Si Can asAc i i y de ec a un e en o de Scale (zoom), se ecalcula el ac o de escala y dependiendo de si ha sido posi i o o nega i o se llama a, el m´e odo sc ollTo de can as di ec amen e o a el m´e odo doSc oll. i ( isDo ){ i ( a c o >1){ in mo eX = ( i n )( x∗scal eF ac o ) ; in mo eY = ( i n )( y∗scal eF ac o ) ; i (x <0){ mo eX = 0 ; y = 0; } i (y <0){ mo eY = 0 ; y = 0; } ealX = ( in )x ; ealY = ( in )y ; can as . sc ol l To (mo eX , mo eY ) ; }e l s e i ( ac o <1 ){ in auxX = 0; in auxY = 0; i (x ∗scaleFac o >can as . ge RealWid h ( ) ) { auxX = −100; }e l s e { auxX = −10; } i (y ∗scaleFac o >can as . ge RealHeigh ( ) ){ auxY = −100; }e l s e { auxY = −10; } 6.2. Diag amas de clases 37 doS c oll (auxX , auxY ) ; } } VncB idgeJNI es la clase que p opo cina los m´e odos pa a comunica se con la pa e na i a. Es capaz de llama a unciones na i as ales como iniConnec , mouseE en , keyE- en , e c., de es a mane a se es ablece la comunicaci´on de Ja a a C/C++ (Ve secci´on 5.2.2). Las no i icaciones llegan desde el c´odigo na i o a a ´es de la in e az Obse e JNI. es. a u eam. ncpp.model.Obse ableCan as + Obse ableCan as() + addObse e (obse e : Obse e Can as) + no i yIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in ) + no i yRed aw(x : in , y : in , wid h : in , heigh : in ) + no i yFinish() «in e ace» es. a u eam. ncpp.model.Obse e Can as + upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in ) + upda eRed aw(x : in , y : in , wid h : in , heigh : in ) + upda eFinish() es. a u eam. ncpp.model.VncB idgeJNI + VncB idgeJNI() + s a Connec (hos : S ing, po : in , pass : S ing, quali y : S ing, wifi : boolean, hideMouse : boolean) : Connec ionE o + finishVnc() + upda eFinishConnec ion() + upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in ) + upda eReD aw(x : in , y : in , wid h : in , heigh : in ) + sendMouseE en (x : in , y : in , e en : MouseE en ) + sendKey(key : in , down : boolean) es. a u eam. ncpp.model.Sc een + Sc een(wid h : in , heigh : in , bpp : in ) + c ea eDa a() + ge Wid h() : in + se Wid h(wid h : in ) + ge Heigh () : in + se Heigh (heigh : in ) + ge Bpp() : in + se Bpp(bpp : in ) + ge Da a() : in [] + add(pos : in , alue : in ) «in e ace» es. a u eam. ncpp.model.Obse e JNI + upda eFinishConnec ion() + upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in ) + upda eReD aw(x : in , y : in , wid h : in , heigh : in ) -sc een -obse e Diag am: model Page 1 Figu a 6.5: Diag ama Modelo 6.2.2. Pa e esc i a en C/C++ Aho a amos a desc ibi el c´odigo esc i o en C/C++. La clase Ja a VncB idgeJNI ealiza las llamadas a la pa e na i a a a ´es de las unciones implemen adas en el iche o Ja aB idge.cpp. Es e iche o no se mues a en el diag ama de clases pues o que no es una clase, a´un as´ı, su ´unica unci´on es hace las llamadas p opias a la clase Vnc, en o as palab as ac ´ua como puen e de Ja a a C++. 38 Cap´ ı ulo 6. Especi icaciones Obse ableJNI + Obse ableJNI() + ~ Obse ableJNI() + addObse e (obse e : jobjec , en : JNIEn *) + no i yIniF ame(wid h : in , heigh : in , bpp : in , dep h : in ) + no i yReD aw() + no i yFinishConnec ion() + finishByClien () + ge Bi mapDa a() + ge A ayElemen s() : jin * + se A ayElemen s(in o : jin *) Handle RFB + Handle RFB() + ~Handle RFB() + se Sc een(sc een : Clien Sc een*) + iniF ameBuffe (clien _sc een : bClien *) + upda eSc een(clien : bClien *, x : in , y : in , w : in , h : in ) + finishConnec ion() + finishClien () + se Pass(aux_pass : cha *) + ge Pass(clien : bClien *) : cha * + eePass() Vnc + Vnc() + ~ Vnc() + iniConnec ion(hos : cha *, po : in , pass : cha *, quali y : in , comp ess : in , hide_mouse : bool) : Connec ionE o + closeConnec ion() + addObse e (obse e : jobjec , en : JNIEn *) + sendMouseE en (x : in , y : in , e en : MouseE en ) : bool + sendKeyE en (key : in , down : bool) : bool Clien Connec ionRFB + Clien Connec ionRFB() + ~Clien Connec ionRFB() + iniConnec ion(hos : cha *, po : in , pass : cha *, pic u e_quali y : in , comp ess : in , hide_mouse : bool) : Connec ionE o + cleanRFB() + sendMouseE en (x : in , y : in , e en : MouseE en ) : bool + sendKeyE en (key : in , down : bool) : bool + s opConnec ion() Clien Sc een + Clien Sc een() + ~Clien Sc een() + doMask(clien : bClien *) + iniSc een(wid h : in , heigh : in , bi sPe Pixel : in ) : in + upda eSc een( ameBuffe : uin 8_ *, x : in , y : in , w : in , h : in ) es. a u eam. ncpp.model.VncB idgeJNI + VncB idgeJNI() + s a Connec (hos : S ing, po : in , pass : S ing, quali y : S ing, wifi : boolean, hideMouse : boolean) : Connec ionE o + finishVnc() + upda eFinishConnec ion() + upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in ) + upda eReD aw(x : in , y : in , wid h : in , heigh : in ) + sendMouseE en (x : in , y : in , e en : MouseE en ) + sendKey(key : in , down : boolean) b 1 0..1- b sc een 1 1 sc een 11 Diag am: connec ion Page 1 Figu a 6.6: Diag ama Conexi´on Al inicializa el c´odigo na i o se c ea la clase Vnc (Ve Figu a 6.6) y se a˜nade el ob- se e a la clase Clien Sc een pa a que ´es e pueda ealiza las no i icaciones a Ja a. En la cons uc o a de Vnc se c ean las clases Clien Sc een, Clien Connec ionRFB y se le pasa a la clase Handle RFB la e e encia a Clien Sc een pa a que ´es a pueda comunica se con ella. Vnc e asmi i ´a odas las o denes que le lleguen de Ja aB idge a Clien Connec ionRFB. La clase Clien Connec ionRFB (Ve Figu a 6.6) es la enca gada de ges iona la cone- xi´on en e el clien e y el se ido u ilizando el p o ocolo RFB. Pa a es ablece una conexi´on lo p ime o que se hace es inicializa la es uc u a bClien , en es e pun o se indica cual es el hos , el pue o, la calidad de imagen, e c. Un pun o muy impo an e de la iniciali- zaci´on es indica cuales son las unciones que se han de llama cuando el se e mande no i icaciones. Pa a ello nos apoyamos en la clase Handle RFB, de al mane a que, po ejemplo, cuando llega un upda e de la imagen indicamos que iene que llama al m´e odo upda eSc een del handle . clien RFB= bGe Clien ( bi sPe Sample , samplesPe Pixel , by esPe Pixel ) ; clien RFB−>se e Po = po ; clien RFB−>se e Hos = hos ; clien RFB−>p og amName = ”VNC++”; 6.2. Diag amas de clases 39 Handle RFB : : se Pass ( pass ) ; clien RFB−>Ge Passwo d = Handle RFB : : ge Pass ; clien RFB−>appDa a . q uali y Le e l = p i c u e q u a l i y ; clien RFB−>appDa a . comp essLe el = comp ess ; clien RFB−>appDa a . useRemo eCu so = hide mouse ; clien RFB−>MallocF ameBu e =Handle RFB : : iniF ameBu e ; clien RFB−>canHandleNewFBSize = TRUE; clien RFB−>Go F ameBu e Upda e=Handle RFB : : upda eSc een ; clien RFB−>FinishedF ameBu e Upda e= Handle RFB : : inishUpda e ; clien RFB−>l i s e n P o = LISTEN PORT OFFSET; clien RFB−>l i s e n 6 P o = LISTEN PORT OFFSET; Una ez e minada la inicializaci´on de bClien se p ocede a la conexi´on con el se ido . i ( ! b I n i C l i e n ( clien RFB ,0 ,NULL)){ e o c onn ec = NoSe e Found ; i (DEBUG) LOGE(”No se e ound ” ) ; clien RFB = NULL; } e l s e i ( ! clien RFB−> ameBu e ){ i (DEBUG) LOGE(”No F ame Found ” ) ; e o c onn ec = NoF ameFound ; cleanR b (); } Si odo a bien se c ea un hilo pa a maneja los e en os del p o ocolo RFB. Dicho hilo es un bucle in ini o a la espe a de mensajes que p o engan del se ido . while ( ! aux his −>s op connec ion ) { mes=Wai Fo Message ( aux his −>clien RFB , imeWai ) ; i (mes<0){ aux his−>s op connec ion = ue ; se e Ou = ue ; } i (mes){ i ( ! HandleRFBSe e Message ( aux his −>clien RFB )){ aux his−>s op connec ion = ue ; se e Ou = ue ; } } } La a iable aux his es un pun e o a Clien Connec ionRFB. Si no se ha pa ado la conexi´on se espe a has a que llega un mensaje del se ido , la unci´on enca gada de ello es Wai Fo Message. Despu´es la unci´on Handle RFBSe e Message es la enca gada de comp oba cual es el mensaje que ha llegado y en unci´on de ello, llama a unas unciones u o as de Handle RFB. Pa a en ia los e en os del a ´on o de pulsaci´on de eclas se u ilizan las unciones SendPoin e E en ySendKeyE en espec i amen e. Cabe des aca que pa a en ia el 40 Cap´ ı ulo 6. Especi icaciones e en o de pulsaci´on de eclado hay que ans o ma el c´odigo de ecla que nos llega desde Ja a pa a que el se e sea capaz de in e p e a lo co ec amen e. bool Clien Connec ionRFB : : sendKeyE en ( in key , bool down){ bKeySym bKey = ans o mToR bKey ( key ) ; i ( bKey != 0){ SendKeyE en ( clien RFB , bKey , down ) ; } } La clase Handle RFB (Ve Figu a 6.6) es una clase comple amen e es ´a ica. Es o se debe a que, dado que LibVNCSe e se encuen a esc i a en C y los e en os del mismo son pun e os a unciones, si no uesen es ´a icos los m´e odos en C++ ienen de o ma impl´ıci a el pa ´ame o his, que es una e e encia a la p opia clase. Po el con a io C no es un lenguaje o ien ado a obje os, po ello ese pa ame o his no exis e en las llamadas. Al decla a es ´a icos los m´e odos, el pa ´ame o his desapa ece. Sus m´e odos b´asicamen e edi igen la llama a las unciones de Clien Sc een, po eso e a necesa io pasa la e e encia al inicio. Clien Sc een (Ve Figu a 6.6) se enca ga del manejo de las ac ualizaciones de la ima- gen, as´ı como de comunica odos los cambios a Ja a. Es a comunicaci´on la hace a a ´es de Obse ableJNI median e la he encia de sus m´e odos. Cuando llega un e en o de inicializa la imagen desde el handle se llama al m´e odo iniSc een. En es e m´e odo se inicializan odos los alo es de la imagen y se en ´ıa una no i icaci´on a Ja a. in Clien Sc een : : in iSc e e n ( cons i n wid h , cons i n heigh , cons i n bi s Pe P ixe l ) { i (DEBUG) LOGE(” JNI iniF ameBu e ” ) ; his −>wid h=wid h ; his −>heigh =heigh ; // se pasa de b i s a by e his −>by esPe Pixel=bi sPe Pixe l /8; his −>dep h = bi sPe Pixel ; // se c a l c u l a e l e s pac io o a l d el b u e his −>s i z e = his −>heigh ∗ his −>wid h∗ his −>by esPe Pixel ; i (DEBUG) LOGE(”FIN JNI iniF ameBu e ” ) ; no i yIniF ame( his−>wid h , his −>heigh , his −>by esPe Pixel , his −>dep h ) ; e u n s i z e ; } Cuando se quie e in oca m´e odos de Ja a, pa a no i ica cambios, es necesa io colo- ca se en el en o no de ejecuci´on ac ual, es o es, en el hilo. Pa a ello usamos la unci´on ge En i omen . Es e m´e odo comp ueba si la a iable en , del ipo JNIEn *, se encuen a apun ando al hilo ac ual, si no uese el caso, se coloca en ´el. 6.2. Diag amas de clases 41 oid Obse ableJNI : : ge En i omen (){ in ge En = m−>Ge En ( ( oid ∗∗)&en , JNI VERSION 1 6 ) ; i ( ge En == JNI EDETACHED){ m−>A achCu en Th ead(&en ,NULL) ; } } El m´e odo no i yIniF ame ob iene el m´e odo upda eIniF ame del en o no Ja a y lo llama pas´andole la in o maci´on nue a. Despu´es se llama a Ge Objec Class pa a ob ene la clase VncB idgeJNI y as´ı, pode hace llamadas a sus m´e odos. Pa a hace una llamada a un m´e odo de Ja a, una ez enemos la clase, hay que u iliza el m´e odo Ge Me hodID pa a ob ene el ID del m´e odo que deseamos in oca . Una ez que dispongamos de dicha ID podemos llama lo usando CallVoidMe hod. oid Obse ableJNI : : no i yIniF ame ( i n wid h , in heigh , in bpp , in dep h ){ ge En i omen ( ) ; i (DEBUG) LOGE(” Take me hod iniF ame ” ) ; o b s e e c l a s s = en −>Ge Objec Class( his−>obse e objec ); // cogemos e l ID jme hodID upda eSc een = en −>Ge Me hodID ( o b s e e c l a s s , ”upda eIniF ame”, ”( I I I I )V” ) ; i (DEBUG) LOGE(” Launch me hod iniF ame ” ) ; en −>CallVoidMe hod ( obse e objec , upda eSc een , wid h , heigh , bpp , dep h ) ; i (DEBUG) LOGE(” Finish launch me hod iniF ame ” ) ; en −>Dele eLocalRe ( o b s e e c l a s s ) ; } Pa a inaliza , el m´e odo upda eSc een de Clien Sc een es el enca gado de ac ualiza una po ci´on de la imagen. El inicio de la po ci´on a ac ualiza iene indicado po los pa ´ame os x e y, siendo w y h la anchu a y la al u a espec i amen e de dicha po ci´on. oid Clien Sc een : : upda eSc een ( u in 8 ∗ ameBu e , cons i n x , cons i n y , cons i n w, cons i n h){ i (DEBUG) LOGE(” JNI Upda e ” ) ; i n p i x e l ; 42 Cap´ ı ulo 6. Especi icaciones in pos ; in pos co l ; in pos a ay ; ge Bi mapDa a (); j i n ∗i n o = ge A ayElemen s ( ) ; in e a l i , e a l j ; o ( i n i =0; i <w; i++ ){ e a l i = i + x ; pos co l = ( e a l i ∗by esPe Pixel ); o ( i n j =0; j<h ; j++){ e a l j = j + y ; pos = (( by esPe Pixel∗wid h ) ∗ e a l j ) + pos col ; memcpy(&pixel ,& ameBu e [ pos ] , by esPe Pixel ) ; pos a ay = ( wid h ∗ e a l j ) + e a l i ; i n o [ po s a ay ] = p i x e l ; } } i (DEBUG) LOGE(” JNI no i y eD aw ” ) ; se A ayElemen s ( i n o ) ; } Lo que hace es e m´e odo es eco e la po ci´on que ha cambiado con los dos bucles o . Las a iables eal i y eal j son las posiciones eales de la po ci´on den o de la imagen. Como la imagen se ep esen a en un bu e unidimensional es necesa io calcula el desplazamien o que se ob iene: pos = ((by esP e P ixel)(wid h))( eal j) + (( eal i)(by esP e P ixel)) Una ez enemos la posici´on copiamos el p´ıxel con memcpy y lo gua damos en in o. El bi map in o es una e e encia al bi map de Ja a, lo ob enemos a a ´es de los m´e odos ge Bi mapDa a yge A ayElemen s, de al mane a que cuando se modi ican elemen os de dicho bi map en C se es ´an modi icando en Ja a. Lo ´unico que al a po hace es ac ualiza la in o maci´on a a ´es del m´e odo se A ayElemen s. Median e el que JNIEn libe a el ec o del en o no de C/C++ con la unci´on ReleaseIn A ayElemen s y se ac ualiza el ec o de Ja a. Cap´ı ulo 7 Compa a i as Se desc ibe la compa aci´on del esula do inal con las aplicaciones que han sido omadas como e e encia en el p incipio del p oyec o. Como ya se indic´o en el cap´ı ulo dos, usamos como pun o de pa ida es aplicaciones que aba can el campo del con ol emo o m´o il. 7.1. Funcionalidad Nues o p op´osi o inicial e a mejo a cie os aspec os de es as aplicaciones ya exis en- es, y en es e apa ado obse amos esul ados. 7.1.1. Funcionalidades des acadas compa idas con VNC++ Hace zoom. Mues a el eclado. Esc ibe. En ´ıa secuencias de eclas. Recue da conexiones p e ias. 7.1.2. Funcionalidades di e en es espec o VNC++ RealVNC: como ya se ma iz´o, es a aplicaci´on es ´a basada en so wa e p i a i o, po lo que no disponemos de mucha in o maci´on ela i a a la implemen aci´on in e - na de es e p oyec o. Pe o algo que nos p opusimos desde el p incipio e a c ea un so wa e pu amen e lib e ya que pensamos que es as´ı como se llega a un p oduc o inal con m´as opciones de desa ollo y uso u u o. Pe mi e, a a ´es de un men´u de opciones, desac i a el modo de pan alla comple a, as´ı como opci´on de Copy&pas e. Tambi´en es des acable la di e encia en el manejo, en VNC Viewe al mo e el dedo po la pan alla lo que mo e emos es el cu so y no la imagen como en nues o caso. Mul iVNC: lib e y de c´odigo abie o, usa acele aci´on ha dwa e OpenGL pa a el dibujado y el zoom, mien as que en nues o caso se ha op ado po el uso de Can as. El manejo en la pan alla de Mul iVNC es igual que el de RealVNC. 43 50 Cap´ ı ulo 7. Compa a i as Mul iVNC: Figu a 7.8: Rendimien o 3G Mul iVNC Como se puede obse a los alo es con una conexi´on 3G son muy pa ecidos, ello es debido a c´omo unciona la p opia conexi´on y sus limi aciones. As´ı pues se puede conclui que el endimien o en en o nos de 3G de las aplicaciones es equi alen e. Cap´ı ulo 8 Conclusiones 8.1. Conclusiones Como conclusi´on pensamos que se han alcanzado las me as p opues as en el apa ado 1.3. Todo el c´odigo ha sido licenciado bajo una licencia lib e (GPL e si´on 3), po an o el obje i o de c ea una aplicaci´on de so wa e lib e se ha cumplido sin mayo p oblema. En cuan o al obje i o m´as impo an e, la cons ucci´on de la aplicaci´on de esc i o io emo o en And oid u ilizando c´odigo na i o, ambi´en se ha cumplido, ya que no s´olo se ha cons uido una aplicaci´on con muchas uncionalidades, sino que es una aplicaci´on e icien e, capaz de compe i con odas las dem´as aplicaciones de esc i o io emo o pa a And oid que exis en en es e momen o. Cabe des aca una ez m´as que la g an di e encia y la az´on po la que es e p oyec o es inno ado , es en que ninguna de las dem´as aplicaciones u ilizan c´odigo na i o, al menos no las de so wa e lib e. La imposibilidad de sabe como es ´an cons uidas las aplicaciones p i a i as nos impide a i ma con o al o undidad que no exis e una aplicaci´on de esc i o io emo o pa a And oid que u ilice el NDK. No obs an e, al no exis i una de so wa e lib e, la inno aci´on sigue es ando ah´ı, ya que hemos abajado sob e algo que no exis e en ning´un lado y con unos esul ados conside ablemen e buenos. 8.2. T abajo Fu u o Como posible abajo u u o se pod ´ıa a˜nadi sopo e pa a odos los idiomas, en dos sen idos. Po una lado la aducci´on de la in e az a di e os idiomas y, po o o, sopo e en el eclado pa a m´as idiomas. O a cosa que se pod ´ıa in es iga m´as es la acele aci´on po ha dwa e, de es a mane a se pod ´ıa consegui una mayo elocidad a la ho a de abaja las im´agenes y con ello se ob end ´ıa una mejo a del endimien o global conside able. Tambi´en pensa en po a la aplicaci´on a las dem´as pla a o mas m´o iles como Fi e ox OS. 51 52 Cap´ ı ulo 8. Conclusiones Bibliog a ´ıa [1] Wikipedia Esc i o io Remo o: h p://es.wikipedia.o g/wiki/Esc i o io_ emo o [2] Wikipedia Vi ual Ne wo k Compu ing: h p://en.wikipedia.o g/wiki/VNC [3] Remo e F ame Bu e P o ocol: h p://www. eal nc.com/docs/ bp o o.pd [4] Wikipedia And oid (ope a ing sys em): h p://en.wikipedia.o g/wiki/And oid_ (ope a ing_sys em) [5] So wa e De elopmen Ki : h p://de elope .and oid.com/sdk/index.h ml [6] Na i e De elopmen Ki : h p://de elope .and oid.com/ ools/sdk/ndk/index. h ml [7] Wikipedia Ja a Na i e In e ace: h p://en.wikipedia.o g/wiki/Ja a_Na i e_ In e ace [8] Tigh VNC, Tigh encoding: h p://www. igh nc.com/decode .php [9] Wikipedia Gi : h p://en.wikipedia.o g/wiki/Gi _(so wa e) [10] Gi : h p://gi -scm.com/ [11] Wi eSha k: h p://www.wi esha k.o g/ [12] F ee So wa e: h p://www. s .o g/abou /wha -is- ee-so wa e [13] Gene al Public License: h p://www.gnu.o g/licenses/gpl.h ml [14] Wikipedia RealVNC: h p://es.wikipedia.o g/wiki/RealVNC [15] Mul iVNC: h ps://play.google.com/s o e/apps/de ails?id=com. cobol o ge.don mind.mul i nc&hl=es [16] And oid- nc- iewe : h p://code.google.com/p/and oid- nc- iewe / [17] SDL: h p://www.libsdl.o g/ [18] Wikipedia Simple Di ec Media Laye : h p://es.wikipedia.o g/wiki/Simple_ Di ec Media_Laye [19] She lockBa : h p://ac ionba she lock.com/ [20] LibVNC: h p://lib ncse e .sou ce o ge.ne / [21] SlidingMenu: h ps://gi hub.com/j eins ein10/SlidingMenu 53 54 BIBLIOGRAF´ IA [22] SQLi e And oid: h p://de elope .and oid.com/ e e ence/and oid/da abase/ sqli e/package-summa y.h ml [23] In e az Holo: h p://de elope .and oid.com/design/s yle/ hemes.h ml Ap´endices 55 Ap´endice A Aqu´ı se p esen a una peque˜na desc ipci´on de c´omo se usa la aplicaci´on. Es e ex o de ayuda se puede e ambi´en desde la p opia aplicaci´on accediendo al men´u en la en ana p incipal. Se encuen a an o en espa˜nol como ingl´es, al igual que odos los di´alogos y ex o de los bo ones. Es el p opio sis ema And oid, en base al idioma seleccionado po de ec o en el sis ema ope a i o, el que selecciona el idioma a mos a . En caso de no dispone del idioma co espondien e al del sis ema, po de ec o se mos a ´an los ex o en ingl´es. A.1. P´agina de ayuda de VNC++ A.1.1. Manejo p incipal Pa a c ea una nue a conexi´on pulse el icono “+” en la ba a supe io de Acci´on (Ve Figu a A.1). Una ez den o, es necesa io especi ica la IP del se ido , as´ı como un nomb e de iden i icaci´on de la conexi´on. El pue o po de ec o es el 5900, pudi´endose cambia , as´ı como la con ase˜na, pudiendose deja en blanco si no se necesi a. Figu a A.1: Nue a conexi´on Figu a A.2: Vis a del esc i o io 57 58 Cap´ ı ulo A. El desplegable de calidades si e pa a indica la calidad de la imagen. Se puede elegi en e calidad supe -al a, al a, media o baja, seg´un el ipo de conexi´on del usua io ya sea m´as len a o ´apida, o simplemen e po necesidad de cie a calidad de imagen. En el bo ´on desplegable de opciones en la ac i idad p incipal se puede accede a es submen´us: La opci´on de Con igu aci´on: pe mi e, a a ´es de dos swi ches de selecci´on, ma ca si se ecue da o no la opci´on de con i ma salida, as´ı como ocul a el cu so o no (Ve Figu a A.3). Manual de uso pa ecido al que se es ´a na ando (Ve Figu a A.4). Secci´on “Ace ca de” donde se e lejan los c eado es de la aplicaci´on, as´ı como el ipo de licencia y las lib e ´ıas usadas (Ve Figu a A.8). Figu a A.3: Con igu aci´on Figu a A.4: Manual de uso A.1.2. Con ol de pes a˜nas Se puede cambia de pes a˜na pulsando sob e las e ique as RECIENTES o FAVORI- TOS, y as´ı e las dis in as conexiones c eadas (Ve Figu a A.5). A.1.3. A˜nadi a a o i os Pa a a˜nadi a a o i os ´unicamen e hay que clica sob e el icono con o ma de es ella (Ve Figu a A.5). Pa a qui a esa conexi´on de a o i os, se pulsa de nue o el icono ma cado, qui ´andose de la secci´on de a o i os. A.1. P´ agina de ayuda de VNC++ 59 A.1.4. Opciones de conexi´on Al pulsa sob e una conexi´on de la lis a, se p esen a un men´u de opciones. Desde ah´ı se puede conec a , mos a la in o maci´on de la conexi´on, edi a y elimina dicha conexi´on. Tambi´en se puede conec a pulsando el icono de la de echa con o ma de lecha. A.1.5. Opciones de edici´on Se pod ´a modi ica cualquie alo p e io de la conexi´on, a excepci´on del iden i icado elegido, del mismo modo que se c ea una nue a conexi´on. A.1.6. Men´u la e al Una ez ca gada la imagen se puede accede al men´u de opciones, an o desde el bo ´on ´ısico del e minal, como a as ando desde la izquie da de la pan alla pa a saca el men´u la e al. Una ez ah´ı se puede mos a eclado, manda eclas, cen a imagen, mos a una ayuda educida y desconec a (Ve Figu a A.6). Figu a A.5: Pes a˜nas Figu a A.6: Men´u la e al A.1.7. Manejo Pa a manda e en o click, simplemen e haga una pulsaci´on con el dedo. Pa a hace doble click, man enga p esionado el dedo sob e la pan alla du an e unos 3 segundos. Pa a hace zoom, coloque un dedo sob e la pan alla, mien as con o o dedo alejas o ace cas del p ime dedo, a modo de pinza.