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.