tizen 2.4 release accepted/tizen/2.4/mobile/20151029.040416 submit/tizen_2.4/20151028.062955 tizen_2.4_mobile_release
authorjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 06:58:17 +0000 (15:58 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 06:58:17 +0000 (15:58 +0900)
105 files changed:
COPYING
Makefile.am
NEWS
autogen.sh [new file with mode: 0755]
configure.ac [changed mode: 0644->0755]
glib-networking.doap [new file with mode: 0644]
glib-networking.mk [new file with mode: 0644]
glib.mk [new file with mode: 0644]
m4/glibtests.m4 [new file with mode: 0644]
packaging/baselibs.conf [new file with mode: 0644]
packaging/glib-networking.changes [new file with mode: 0644]
packaging/glib-networking.manifest [new file with mode: 0644]
packaging/glib-networking.spec [changed mode: 0644->0755]
po/.gitignore [new file with mode: 0644]
po/LINGUAS
po/an.po [new file with mode: 0644]
po/ar.po [new file with mode: 0644]
po/as.po
po/be.po
po/bg.po
po/ca.po
po/ca@valencia.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en_GB.po
po/es.po
po/et.po
po/eu.po
po/fa.po
po/fi.po
po/fr.po
po/fur.po [new file with mode: 0644]
po/gl.po
po/he.po
po/hi.po
po/hu.po
po/id.po
po/it.po
po/ja.po
po/ko.po
po/lt.po
po/lv.po
po/ml.po
po/nb.po
po/nl.po
po/pa.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ru.po
po/sk.po [new file with mode: 0644]
po/sl.po
po/sr.po
po/sr@latin.po
po/te.po
po/tg.po [new file with mode: 0644]
po/th.po
po/tr.po
po/ug.po
po/vi.po
po/zh_CN.po
po/zh_HK.po
po/zh_TW.po
proxy/gnome/Makefile.am
proxy/gnome/gproxyresolvergnome.c
proxy/libproxy/Makefile.am
proxy/libproxy/glibpacrunner.c
proxy/libproxy/glibproxyresolver.c
proxy/tests/Makefile.am
proxy/tests/common.c [new file with mode: 0644]
proxy/tests/gnome.c
proxy/tests/libproxy.c [new file with mode: 0644]
tls/gnutls/Makefile.am
tls/gnutls/TIZEN.h [changed mode: 0644->0755]
tls/gnutls/gtlsbackend-gnutls.c
tls/gnutls/gtlsbackend-gnutls.h
tls/gnutls/gtlscertificate-gnutls.c [changed mode: 0644->0755]
tls/gnutls/gtlscertificate-gnutls.h
tls/gnutls/gtlsclientconnection-gnutls.c
tls/gnutls/gtlsconnection-gnutls.c
tls/gnutls/gtlsconnection-gnutls.h
tls/gnutls/gtlsdatabase-gnutls.c [changed mode: 0644->0755]
tls/gnutls/gtlsfiledatabase-gnutls.c [changed mode: 0644->0755]
tls/gnutls/gtlsinputstream-gnutls.c
tls/gnutls/gtlsoutputstream-gnutls.c
tls/gnutls/gtlsserverconnection-gnutls.c
tls/pkcs11/Makefile.am
tls/tests/Makefile.am
tls/tests/certificate.c
tls/tests/connection.c
tls/tests/file-database.c [new file with mode: 0644]
tls/tests/files/ca-verisign-sha1.pem [new file with mode: 0644]
tls/tests/files/chain-with-verisign-md2.pem [new file with mode: 0644]
tls/tests/files/non-ca.pem [new file with mode: 0644]
tls/tests/files/server-key.der [new file with mode: 0644]
tls/tests/files/server-key.pem [new file with mode: 0644]
tls/tests/mock-interaction.c
tls/tests/mock-pkcs11.c
tls/tests/pkcs11-array.c
tls/tests/pkcs11-pin.c
tls/tests/pkcs11-slot.c
tls/tests/pkcs11-util.c
wss.pem [new file with mode: 0644]

diff --git a/COPYING b/COPYING
index 5bc8fb2..371ec20 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,13 +1,15 @@
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
 
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
 
                             Preamble
 
@@ -16,97 +18,110 @@ freedom to share and change it.  By contrast, the GNU General Public
 Licenses are intended to guarantee your freedom to share and change
 free software--to make sure the software is free for all its users.
 
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
 
   To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
 
   For example, if you distribute copies of the library, whether gratis
 or for a fee, you must give the recipients all the rights that we gave
 you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
 it.  And you must show them these terms so they know their rights.
 
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
 permission to copy, distribute and/or modify the library.
 
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
 \f
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
 
   The precise terms and conditions for copying, distribution and
 modification follow.  Pay close attention to the difference between a
 "work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
 \f
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
+                  GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
 
   A "library" means a collection of software functions and/or data
 prepared so as to be conveniently linked with application programs
@@ -123,8 +138,8 @@ included without limitation in the term "modification".)
   "Source code" for a work means the preferred form of the work for
 making modifications to it.  For a library, complete source code means
 all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
 
   Activities other than copying, distribution and modification are not
 covered by this License; they are outside its scope.  The act of
@@ -133,7 +148,7 @@ such a program is covered only if its contents constitute a work based
 on the Library (independent of the use of the Library in a tool for
 writing it).  Whether that is true depends on what the Library does
 and what the program that uses the Library does.
-  
+
   1. You may copy and distribute verbatim copies of the Library's
 complete source code as you receive it, in any medium, provided that
 you conspicuously and appropriately publish on each copy an
@@ -255,7 +270,7 @@ distribute the object code for the work under the terms of Section 6.
 Any executables containing that work also fall under Section 6,
 whether or not they are linked directly with the Library itself.
 \f
-  6. As an exception to the Sections above, you may also compile or
+  6. As an exception to the Sections above, you may also combine or
 link a "work that uses the Library" with the Library to produce a
 work containing portions of the Library, and distribute that work
 under terms of your choice, provided that the terms permit
@@ -282,23 +297,31 @@ of these things:
     Library will not necessarily be able to recompile the application
     to use the modified definitions.)
 
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
 
-    c) If distribution of the work is made by offering access to copy
+    d) If distribution of the work is made by offering access to copy
     from a designated place, offer equivalent access to copy the above
     specified materials from the same place.
 
-    d) Verify that the user has already received a copy of these
+    e) Verify that the user has already received a copy of these
     materials or that you have already sent this user a copy.
 
   For an executable, the required form of the "work that uses the
 Library" must include any data and utility programs needed for
 reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
 components (compiler, kernel, and so on) of the operating system on
 which the executable runs, unless that component itself accompanies
 the executable.
@@ -347,7 +370,7 @@ Library), the recipient automatically receives a license from the
 original licensor to copy, distribute, link with or modify the Library
 subject to these terms and conditions.  You may not impose any further
 restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+You are not responsible for enforcing compliance by third parties with
 this License.
 \f
   11. If, as a consequence of a court judgment or allegation of patent
@@ -363,9 +386,10 @@ all those who receive copies directly or indirectly through you, then
 the only way you could satisfy both it and this License would be to
 refrain entirely from distribution of the Library.
 
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
 
 It is not the purpose of this section to induce you to infringe any
 patents or other property right claims or to contest validity of any
@@ -383,14 +407,14 @@ be a consequence of the rest of this License.
 
   12. If the distribution and/or use of the Library is restricted in
 certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
 
   13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
+versions of the Lesser General Public License from time to time.
 Such new versions will be similar in spirit to the present version,
 but may differ in detail to address new problems or concerns.
 
@@ -435,47 +459,3 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
                      END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
index 0a54e1d..42405bf 100644 (file)
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
 
@@ -21,9 +21,8 @@ endif
 
 if HAVE_GNUTLS
 SUBDIRS += tls/gnutls
-endif
-
 SUBDIRS += tls/tests
+endif
 
 install-exec-hook:
        if test -n "$(GIO_QUERYMODULES)" -a -z "$(DESTDIR)"; then \
diff --git a/NEWS b/NEWS
index 203aaf2..ba6cd79 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,9 +1,240 @@
-2.32.3
+2.38.0
 ======
-  * proxy/gnome: Fix SOCKS to work when no http proxy is set
+  * New stable release. (No changes since 2.37.5)
+
+2.37.5
+======
+  * gnutls: minimum version is now 2.12.8 (with 3.x preferred...)
+
+  * glib-networking now supports the --enable-installed-tests flag, to
+    install its test programs to run at other times (ie, after
+    updating glib)
+
+2.37.4
+======
+  * proxy/gnome: further improve GNOME session detection (#701377)
+
+  * gnutls: don't crash if $G_TLS_GNUTS_PRIORITY is invalid (#701693)
+
+2.37.2
+======
+  * proxy/gnome: Improve session-type detection to include
+    gnome-classic and anything else starting with "gnome" (#700607,
+    Giovanni Campagna)
+
+  * proxy/libproxy: make SOCKS work when using the async API (#699359,
+    Dan)
+
+  * proxy/tests: make the libproxy test program use the just-built
+    plugin rather than the installed one. Oops (#700286, Iain Lane)
+
+  * proxy/tests: fix to not error out if neither proxy module is built
+    (#700628, Dan)
+
+  * tls/tests: fix a sporadic crash (Dan)
+
+2.37.1
+======
+  * gnutls: Fixed a bug that could cause hangs and/or bursts of CPU
+    usage in some cases. (#696881, Olivier Crête)
+
+  * gnutls: Fixed CFLAGS when building with gnutls in a different
+    prefix. (#696519, Emmanuel Pacaud)
+
+  * gnutls: Fixed a hang while rehandshaking with gnutls 3.x (#695062,
+    Dan)
+
+  * gnutls: Fixed a handshaking crash in multithreaded use (#697754,
+    Olivier Crête)
+
+  * proxy/gnome: Fix "automatic" mode, which was mistakenly being
+    treated as "none" (Dan)
+
+  * proxy/gnome: Use this in Unity sessions as well as GNOME ones.
+    (#698936, Iain Lane)
+
+  * New/Updated translations:
+       Friulian, Indonesian, Turkish
+
+2.36.0
+=======
+  * New/Updated translations:
+       Assamese, Basque, Belarusian, Catalan (Valencian), Catalan,
+       Danish, Finnish, Hindi, Korean, Latvian, Persian, Portuguese,
+       Russian, Slovak, Tadjik, Thai
+
+2.35.9
+======
+  * Fixed one kind of handshake failure to return the correct error
+    code under gnutls 3.x (allowing libsoup to recognize the error and
+    do fallback to SSL 3.0). (#694812)
+
+  * Updated translations:
+       Chinese (traditional), French, German, Punjabi, Uyghur,
+       Vietnamese
+
+2.35.8
+======
+  * proxy/gnome: ported to new GSimpleProxyResolver, and added more
+    tests
+
+  * gnutls: Fixed a small per-connection leak (#693718)
+
+  * tls/tests: Fixed several race conditions that caused spurious
+    failures. (#693720)
+
+  * Updated translations:
+       Malayalam
+
+2.35.6
+======
+  * proxy/gnome: Fixed several bugs:
+
+       * Multithreaded usage could result in crashes
+
+       * In "automatic" mode, synchronous lookups would obey
+         ignore-hosts, but asynchronous lookups would not. (Now they
+         both do.)
+
+       * lookup_async() would never notice if the proxy settings
+         switched from "automatic" to "manual" or "none" (and would
+         make a synchronous D-Bus call when switching in the other
+         direction).
+
+       * If given an invalid URI, lookup_async() would return a
+         successful result (and leak the GError that it was supposed
+         to have returned), and lookup() would return both the error
+         and the proxy (leaking one or the other, depending on how
+         the caller behaved).
+
+  * Updated translations:
+       Italian, Malayalam, Norwegian bokmål, Serbian, Uyghur
+
+2.35.4
+======
+  * proxy/gnome: The tests should now work correctly even if
+    run from a non-GNOME environment. (Robert Ancell)
+
+  * Updated translations:
+       Brazilian Portuguese, Bulgarian, Estonian, Galician, Greek,
+       Hungarian, Slovenian
+
+2.35.3
+======
+  * build: The TLS tests are now not built if you are building without
+    gnutls support. (Saleem Abdulrasool)
+
+  * gnutls: Several handshaking fixes:
+
+       * Fix a hang when doing a synchronous close() immediately
+          after cancelling an asynchronous handshake() (which would
+          happen in libsoup if you cancelled a message at the right
+          time). (#688751, Dan)
+
+       * Avoid an assertion when an implicit handshake fails
+         (#689274, Stef)
+
+       * Fixed GTlsServerConnection:authentication-mode to work
+          again, and added a regression test for this. (#689259, Stef)
+
+       * Return the appropriate error
+          (G_TLS_ERROR_CERTIFICATE_REQUIRED) when a handshake fails
+          because the server required a certificate but none was
+          provided, and added a test for this. (#689260, Stef)
+
+       * Make g_io_stream_close() finish successfully after a failed
+          handshake (#689260, Stef)
+
+       * Make g_io_stream_close() finish successfully before a
+         handshake (#689271, Stef)
+
+  * gnutls: Updated to be aware of G_IO_ERROR_BROKEN_PIPE in glib
+    2.35.3, which needs to be converted to G_TLS_ERROR_NOT_TLS in some
+    cases. (Previously this error showed up as just G_IO_ERROR_FAILED.)
+    (Dan)
+
+  * proxy/gnome: This is now only used in GNOME login sessions (as,
+    essentially, a more efficient version of the libproxy GNOME
+    backend); in non-GNOME sessions, gio will now fall back to the
+    libproxy plugin, allowing environment variables or other libproxy
+    settings backends to be used.
+
+  * New/Updated translations:
+       Czech, Hebrew, Lithuanian, Polish, Slovak, Spanish
+
+2.35.1
+======
+  * Update for glib 2.35.1; remove g_type_init() calls and port to
+    GTask.
 
   * Updated translations:
-       Greek
+       Estonian
+
+2.34.0
+======
+  * Updated translations:
+       Arabic, Bulgarian, Catalan (Valencian), Catalan, Chinese
+       (Simplified), Hindi, Japanese, Thai
+
+2.33.14
+=======
+  * Updated translations:
+       Brazilian Portuguese, British English, Czech, Danish, Finnish,
+       French, German, Korean, Punjabi
+
+2.33.12
+=======
+  * gnutls: Revert the addition of the certificate-bytes and
+    private-key-bytes properties to GTlsCertificateGnutls, since they
+    were reverted in glib. (#682081, Stef)
+
+  * Updated translations:
+       Belarusian, Hungarian, Indonesian, Italian, Latvian, Polish,
+       Polish, Vietnamese
+
+2.33.10
+=======
+  * gnutls: Improved the certificate verifying code to deal with the
+    case of a CA being reissued with the same key but a different
+    signature algorithm. (#681299, Stef)
+
+  * gnutls: Fixed an uninitialized variable in
+    g_tls_connection_gnutls_close(). (#681636)
+
+  * Updated translations:
+       Assamese, Portuguese, Telugu
+
+2.33.8
+======
+  * gnutls: If a GTlsConnection gets an error when handshaking, it
+    will now continue to return that error message on future I/O
+    attempts, rather than behaving in an undefined manner.
+
+  * gnutls: You can now read from a GTlsConnection's input stream and
+    write to its output stream at the same time (either in different
+    threads, or asynchronously in a single thread). (#660252)
+
+  * Updated translations:
+       Chinese (traditional), Galician, Greek, Hebrew, Lithuanian,
+       Norwegian bokmål, Russian, Serbian, Slovenian, Spanish
+
+2.33.3
+======
+  * Updated autogen.sh (in particular to support automake 1.12)
+    (#675261)
+
+  * gnutls: fix the use-system-certdb property on GTlsConnectionGnutls
+    (previously, setting it to FALSE was a no-op).
+
+  * Updated translations:
+       Dutch, Greek, Indonesian
+
+2.33.2
+======
+  * gnutls: simplify using new glib pollable stream methods
+
+  * proxy/gnome: fix a bug that made it impossible to use SOCKS
+    without also having a separate http proxy.
 
 2.32.1
 ======
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..16d8287
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+
+olddir=`pwd`
+cd "$srcdir"
+
+AUTORECONF=`which autoreconf`
+if test -z $AUTORECONF; then
+        echo "*** No autoreconf found, please install it ***"
+        exit 1
+fi
+
+mkdir -p m4
+autoreconf --force --install --verbose || exit $?
+intltoolize --copy --force --automake || exit $?
+
+cd "$olddir"
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
old mode 100644 (file)
new mode 100755 (executable)
index d43b24c..a798dcd
@@ -1,7 +1,7 @@
 AC_PREREQ(2.65)
 AC_CONFIG_MACRO_DIR([m4])
 
-AC_INIT([glib-networking],[2.32.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network])
+AC_INIT([glib-networking],[2.38.0],[http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network])
 
 AC_CONFIG_SRCDIR([proxy/libproxy/glibproxyresolver.h])
 AC_CONFIG_HEADERS([config.h])
@@ -33,7 +33,8 @@ AM_GLIB_GNU_GETTEXT
 dnl *****************************
 dnl *** Check GLib GIO        ***
 dnl *****************************
-AM_PATH_GLIB_2_0(2.31.6,,AC_MSG_ERROR(GLIB not found),gio)
+AM_PATH_GLIB_2_0(2.38.0,,AC_MSG_ERROR(GLIB not found),gio)
+GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36"
 
 GIO_MODULE_DIR=$($PKG_CONFIG --variable giomoduledir gio-2.0)
 AS_IF([test "x$GIO_MODULE_DIR" = "x"],
@@ -43,6 +44,8 @@ AC_SUBST(GIO_MODULE_DIR)
 AC_PATH_PROG(GIO_QUERYMODULES, gio-querymodules)
 AC_SUBST(GIO_QUERYMODULES)
 
+GLIB_TESTS
+
 dnl *****************************
 dnl *** Checks for LibProxy   ***
 dnl *****************************
@@ -81,8 +84,7 @@ dnl *****************************
 dnl *** Checks for GNUTLS     ***
 dnl *****************************
 
-GNUTLS_MIN_REQUIRED=2.11.0
-GNUTLS_MIN_PKCS11=2.12.8
+GNUTLS_MIN_REQUIRED=2.12.8
 
 AC_ARG_WITH(gnutls,
     [AC_HELP_STRING([--with-gnutls],
@@ -140,7 +142,7 @@ AC_ARG_WITH(pkcs11,
                        [with_pkcs11=check])
 if test "x$with_pkcs11" != "xno"; then
        PKG_CHECK_MODULES(PKCS11,
-                         [p11-kit-1 >= $P11_KIT_REQUIRED gnutls >= $GNUTLS_MIN_PKCS11],
+                         [p11-kit-1 >= $P11_KIT_REQUIRED],
                          [with_pkcs11=yes
                           pkcs11_support=p11-kit
                           tls_support="${tls_support}gnutls-pkcs11 "
@@ -155,6 +157,70 @@ AM_CONDITIONAL(HAVE_PKCS11, [test "x$with_pkcs11" = "xyes"])
 AC_SUBST(PKCS11_CFLAGS)
 AC_SUBST(PKCS11_LIBS)
 
+dnl *************************
+dnl *** Tizen multiple certificate support  ***
+dnl *************************
+
+AC_ARG_ENABLE(tizen-multiple-certificate,
+       AS_HELP_STRING([--enable-tizen-multiple-certificate], [Enable Tizen multiple certificate support ]),        ,
+       enable_tizen_multiple_certificate=no)
+
+AC_MSG_CHECKING([for Tizen multiple certificate])
+if test $enable_tizen_multiple_certificate != no;then
+        AC_DEFINE(ENABLE_TIZEN_TV_MULTIPLE_CERTIFICATE, 1, [Add new feature, support to install more than one file, multiple file path will be seperated by colon symbol])
+fi
+AC_MSG_RESULT($enable_tizen_multiple_certificate)
+
+AM_CONDITIONAL(TIZEN_TV_MULTIPLE_CERTIFICATE, [test $enable_tizen_multiple_certificate = yes])
+
+dnl ***************************
+dnl *** Tizen dlog support  ***
+dnl ***************************
+
+AC_ARG_ENABLE(tizen-dlog,
+        AS_HELP_STRING([--enable-tizen-dlog], [Enable Tizen dlog support ]),        ,
+        enable_tizen_dlog=no)
+
+AC_MSG_CHECKING([for Tizen dlog])
+if test $enable_tizen_dlog != no;then
+        AC_DEFINE(ENABLE_TIZEN_TV_DLOG, 1, [Add new feature, support to add tizen dlog in glib-networking])
+fi
+AC_MSG_RESULT($enable_tizen_dlog)
+
+AM_CONDITIONAL(TIZEN_TV_DLOG, [test $enable_tizen_dlog = yes])
+
+dnl *****************************************************
+dnl *** Tizen update gnutls default priority support  ***
+dnl *****************************************************
+
+AC_ARG_ENABLE(tizen-tv-update-default-priority,
+        AS_HELP_STRING([--enable-tizen-tv-update-default-priority], [Enable Tizen update gnults default priority support ]),        ,
+        enable_tizen_tv_update_default_priority=no)
+
+AC_MSG_CHECKING([for Tizen tv update default priority])
+if test $enable_tizen_tv_update_default_priority != no;then
+        AC_DEFINE(ENABLE_TIZEN_TV_UPDATE_DEFAULT_PRIORITY, 1, [Add new feature, support to update gnutls default priority in glib-networking])
+fi
+AC_MSG_RESULT($enable_tizen_tv_update_default_priority)
+
+AM_CONDITIONAL(TIZEN_TV_UPDATE_DEFAULT_PRIORITY, [test $enable_tizen_tv_update_default_priority = yes])
+
+dnl *******************************
+dnl *** Tizen performance test  ***
+dnl *******************************
+
+AC_ARG_ENABLE(tizen-performance-test-log,
+        AS_HELP_STRING([--enable-tizen-performance-test-log], [Enable Tizen performance test log]),        ,
+       enable_tizen_performance_test_log=no)
+
+AC_MSG_CHECKING([for Tizen performance test log])
+if test $enable_tizen_performance_test_log != no;then
+       AC_DEFINE(ENABLE_TIZEN_PERFORMANCE_TEST_LOG, 1, [Add performance test log])
+fi
+AC_MSG_RESULT($enable_tizen_performance_test_log)
+
+AM_CONDITIONAL(TIZEN_PERFORMANCE_TEST_LOG, [test $enable_tizen_performance_test_log = yes])
+
 dnl ************************************
 dnl *** Enable lcov coverage reports ***
 dnl ************************************
diff --git a/glib-networking.doap b/glib-networking.doap
new file mode 100644 (file)
index 0000000..048b5de
--- /dev/null
@@ -0,0 +1,30 @@
+<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+         xmlns:foaf="http://xmlns.com/foaf/0.1/"
+         xmlns:gnome="http://api.gnome.org/doap-extensions#"
+         xmlns="http://usefulinc.com/ns/doap#">
+
+  <name xml:lang="en">glib-networking</name>
+  <shortdesc xml:lang="en">Network extensions for GLib</shortdesc>
+  <description xml:lang="en"> glib-networking contains the implementations of certain GLib networking features that cannot be implemented directly in GLib itself because of their dependencies.
+
+Currently it contains a GNUTLS-based implementation of GTlsBackend, a libproxy-based implementation of GProxyResolver, and a GNOME GProxyResolver that uses the proxy information from the GSettings schemas in gsettings-desktop-schemas.</description>
+
+  <download-page rdf:resource="http://download.gnome.org/sources/glib-networking" />
+  <bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=glib" />
+
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Nicolas Dufresne</foaf:name>
+      <foaf:mbox rdf:resource="mailto:nicolas.dufresne@collabora.co.uk" />
+      <gnome:userid>nicolasd</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Dan Winship</foaf:name>
+      <foaf:mbox rdf:resource="mailto:danw@gnome.org" />
+      <gnome:userid>danw</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+</Project>
diff --git a/glib-networking.mk b/glib-networking.mk
new file mode 100644 (file)
index 0000000..29b6a6a
--- /dev/null
@@ -0,0 +1,13 @@
+### glib-networking declarations
+
+module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_io_module_(load|unload|query)'
+
+giomoduledir = $(GIO_MODULE_DIR)
+
+AM_CPPFLAGS =                          \
+       -DG_LOG_DOMAIN=\"GLib-Net\"     \
+       -DG_DISABLE_DEPRECATED          \
+       $(GLIB_CFLAGS)                  \
+       $(NULL)
+
+include $(top_srcdir)/glib.mk
diff --git a/glib.mk b/glib.mk
new file mode 100644 (file)
index 0000000..490bcf8
--- /dev/null
+++ b/glib.mk
@@ -0,0 +1,216 @@
+# GLIB - Library of useful C routines
+
+GTESTER = gtester                      # for non-GLIB packages
+GTESTER_REPORT = gtester-report        # for non-GLIB packages
+#GTESTER = $(top_builddir)/glib/gtester                        # for the GLIB package
+#GTESTER_REPORT = $(top_builddir)/glib/gtester-report  # for the GLIB package
+NULL =
+
+# initialize variables for unconditional += appending
+BUILT_SOURCES =
+BUILT_EXTRA_DIST =
+CLEANFILES = *.log *.trs
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+EXTRA_DIST =
+TEST_PROGS =
+
+installed_test_LTLIBRARIES =
+installed_test_PROGRAMS =
+installed_test_SCRIPTS =
+nobase_installed_test_DATA =
+
+noinst_LTLIBRARIES =
+noinst_PROGRAMS =
+noinst_SCRIPTS =
+noinst_DATA =
+
+check_LTLIBRARIES =
+check_PROGRAMS =
+check_SCRIPTS =
+check_DATA =
+
+TESTS =
+
+### testing rules
+
+# test: run all tests in cwd and subdirs
+test: test-nonrecursive
+       @ for subdir in $(SUBDIRS) . ; do \
+           test "$$subdir" = "." -o "$$subdir" = "po" || \
+           ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+         done
+
+# test-nonrecursive: run tests only in cwd
+test-nonrecursive: ${TEST_PROGS}
+       @test -z "${TEST_PROGS}" || G_TEST_SRCDIR="$(abs_srcdir)" G_TEST_BUILDDIR="$(abs_builddir)" G_DEBUG=gc-friendly MALLOC_CHECK_=2 MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) ${GTESTER} --verbose ${TEST_PROGS}
+
+# test-report: run tests in subdirs and generate report
+# perf-report: run tests in subdirs with -m perf and generate report
+# full-report: like test-report: with -m perf and -m slow
+test-report perf-report full-report:   ${TEST_PROGS}
+       @test -z "${TEST_PROGS}" || { \
+         case $@ in \
+         test-report) test_options="-k";; \
+         perf-report) test_options="-k -m=perf";; \
+         full-report) test_options="-k -m=perf -m=slow";; \
+         esac ; \
+         if test -z "$$GTESTER_LOGDIR" ; then  \
+           G_TEST_SRCDIR="$(abs_srcdir)" G_TEST_BUILDDIR="$(abs_builddir)" ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
+         elif test -n "${TEST_PROGS}" ; then \
+           G_TEST_SRCDIR="$(abs_srcdir)" G_TEST_BUILDDIR="$(abs_builddir)" ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
+         fi ; \
+       }
+       @ ignore_logdir=true ; \
+         if test -z "$$GTESTER_LOGDIR" ; then \
+           GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
+           ignore_logdir=false ; \
+         fi ; \
+         if test -d "$(top_srcdir)/.git" ; then \
+           REVISION=`git describe` ; \
+         else \
+           REVISION=$(VERSION) ; \
+         fi ; \
+         for subdir in $(SUBDIRS) . ; do \
+           test "$$subdir" = "." -o "$$subdir" = "po" || \
+           ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+         done ; \
+         $$ignore_logdir || { \
+           echo '<?xml version="1.0"?>'              > $@.xml ; \
+           echo '<report-collection>'               >> $@.xml ; \
+           echo '<info>'                            >> $@.xml ; \
+           echo '  <package>$(PACKAGE)</package>'   >> $@.xml ; \
+           echo '  <version>$(VERSION)</version>'   >> $@.xml ; \
+           echo "  <revision>$$REVISION</revision>" >> $@.xml ; \
+           echo '</info>'                           >> $@.xml ; \
+           for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
+             sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
+           done ; \
+           echo >> $@.xml ; \
+           echo '</report-collection>' >> $@.xml ; \
+           rm -rf "$$GTESTER_LOGDIR"/ ; \
+           ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
+         }
+.PHONY: test test-report perf-report full-report test-nonrecursive
+
+.PHONY: lcov genlcov lcov-clean
+# use recursive makes in order to ignore errors during check
+lcov:
+       -$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(MAKE) $(AM_MAKEFLAGS) genlcov
+
+# we have to massage the lcov.info file slightly to hide the effect of libtool
+# placing the objects files in the .libs/ directory separate from the *.c
+# we also have to delete tests/.libs/libmoduletestplugin_*.gcda
+genlcov:
+       rm -f $(top_builddir)/tests/.libs/libmoduletestplugin_*.gcda
+       $(LTP) --directory $(top_builddir) --capture --output-file glib-lcov.info --test-name GLIB_PERF --no-checksum --compat-libtool
+       LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory glib-lcov --title "GLib Code Coverage" --legend --show-details glib-lcov.info
+       @echo "file://$(abs_top_builddir)/glib-lcov/index.html"
+
+lcov-clean:
+       -$(LTP) --directory $(top_builddir) -z
+       -rm -rf glib-lcov.info glib-lcov
+       -find -name '*.gcda' -print | xargs rm
+
+# run tests in cwd as part of make check
+check-local: test-nonrecursive
+
+# We support a fairly large range of possible variables.  It is expected that all types of files in a test suite
+# will belong in exactly one of the following variables.
+#
+# First, we support the usual automake suffixes, but in lowercase, with the customary meaning:
+#
+#   test_programs, test_scripts, test_data, test_ltlibraries
+#
+# The above are used to list files that are involved in both uninstalled and installed testing.  The
+# test_programs and test_scripts are taken to be actual testcases and will be run as part of the test suite.
+# Note that _data is always used with the nobase_ automake variable name to ensure that installed test data is
+# installed in the same way as it appears in the package layout.
+#
+# In order to mark a particular file as being only for one type of testing, use 'installed' or 'uninstalled',
+# like so:
+#
+#   installed_test_programs, uninstalled_test_programs
+#   installed_test_scripts, uninstalled_test_scripts
+#   installed_test_data, uninstalled_test_data
+#   installed_test_ltlibraries, uninstalled_test_ltlibraries
+#
+# Additionally, we support 'extra' infixes for programs and scripts.  This is used for support programs/scripts
+# that should not themselves be run as testcases (but exist to be used from other testcases):
+#
+#   test_extra_programs, installed_test_extra_programs, uninstalled_test_extra_programs
+#   test_extra_scripts, installed_test_extra_scripts, uninstalled_test_extra_scripts
+#
+# Additionally, for _scripts and _data, we support the customary dist_ prefix so that the named script or data
+# file automatically end up in the tarball.
+#
+#   dist_test_scripts, dist_test_data, dist_test_extra_scripts
+#   dist_installed_test_scripts, dist_installed_test_data, dist_installed_test_extra_scripts
+#   dist_uninstalled_test_scripts, dist_uninstalled_test_data, dist_uninstalled_test_extra_scripts
+#
+# Note that no file is automatically disted unless it appears in one of the dist_ variables.  This follows the
+# standard automake convention of not disting programs scripts or data by default.
+#
+# test_programs, test_scripts, uninstalled_test_programs and uninstalled_test_scripts (as well as their disted
+# variants) will be run as part of the in-tree 'make check'.  These are all assumed to be runnable under
+# gtester.  That's a bit strange for scripts, but it's possible.
+
+# we use test -z "$(TEST_PROGS)" above, so make sure we have no extra whitespace...
+TEST_PROGS += $(strip $(test_programs) $(test_scripts) $(uninstalled_test_programs) $(uninstalled_test_scripts) \
+                      $(dist_test_scripts) $(dist_uninstalled_test_scripts))
+
+# Note: build even the installed-only targets during 'make check' to ensure that they still work.
+# We need to do a bit of trickery here and manage disting via EXTRA_DIST instead of using dist_ prefixes to
+# prevent automake from mistreating gmake functions like $(wildcard ...) and $(addprefix ...) as if they were
+# filenames, including removing duplicate instances of the opening part before the space, eg. '$(addprefix'.
+all_test_programs     = $(test_programs) $(uninstalled_test_programs) $(installed_test_programs) \
+                        $(test_extra_programs) $(uninstalled_test_extra_programs) $(installed_test_extra_programs)
+all_test_scripts      = $(test_scripts) $(uninstalled_test_scripts) $(installed_test_scripts) \
+                        $(test_extra_scripts) $(uninstalled_test_extra_scripts) $(installed_test_extra_scripts)
+all_dist_test_scripts = $(dist_test_scripts) $(dist_uninstalled_test_scripts) $(dist_installed_test_scripts) \
+                        $(dist_test_extra_scripts) $(dist_uninstalled_test_extra_scripts) $(dist_installed_test_extra_scripts)
+all_test_scripts     += $(all_dist_test_scripts)
+EXTRA_DIST           += $(all_dist_test_scripts)
+all_test_data         = $(test_data) $(uninstalled_test_data) $(installed_test_data)
+all_dist_test_data    = $(dist_test_data) $(dist_uninstalled_test_data) $(dist_installed_test_data)
+all_test_data        += $(all_dist_test_data)
+EXTRA_DIST           += $(all_dist_test_data)
+all_test_ltlibs       = $(test_ltlibraries) $(uninstalled_test_ltlibraries) $(installed_test_ltlibraries)
+
+if ENABLE_ALWAYS_BUILD_TESTS
+noinst_LTLIBRARIES += $(all_test_ltlibs)
+noinst_PROGRAMS += $(all_test_programs)
+noinst_SCRIPTS += $(all_test_scripts)
+noinst_DATA += $(all_test_data)
+else
+check_LTLIBRARIES += $(all_test_ltlibs)
+check_PROGRAMS += $(all_test_programs)
+check_SCRIPTS += $(all_test_scripts)
+check_DATA += $(all_test_data)
+endif
+
+if ENABLE_INSTALLED_TESTS
+installed_test_PROGRAMS += $(test_programs) $(installed_test_programs) \
+                          $(test_extra_programs) $(installed_test_extra_programs)
+installed_test_SCRIPTS += $(test_scripts) $(installed_test_scripts) \
+                          $(test_extra_scripts) $(test_installed_extra_scripts)
+installed_test_SCRIPTS += $(dist_test_scripts) $(dist_test_extra_scripts) \
+                          $(dist_installed_test_scripts) $(dist_installed_test_extra_scripts)
+nobase_installed_test_DATA += $(test_data) $(installed_test_data)
+nobase_installed_test_DATA += $(dist_test_data) $(dist_installed_test_data)
+installed_test_LTLIBRARIES += $(test_ltlibraries) $(installed_test_ltlibraries)
+installed_testcases = $(test_programs) $(installed_test_programs) \
+                      $(test_scripts) $(installed_test_scripts) \
+                      $(dist_test_scripts) $(dist_installed_test_scripts)
+
+installed_test_meta_DATA = $(installed_testcases:=.test)
+
+%.test: %$(EXEEXT) Makefile
+       $(AM_V_GEN) (echo '[Test]' > $@.tmp; \
+       echo 'Type=session' >> $@.tmp; \
+       echo 'Exec=$(installed_testdir)/$<' >> $@.tmp; \
+       mv $@.tmp $@)
+
+CLEANFILES += $(installed_test_meta_DATA)
+endif
diff --git a/m4/glibtests.m4 b/m4/glibtests.m4
new file mode 100644 (file)
index 0000000..27e9024
--- /dev/null
@@ -0,0 +1,28 @@
+dnl GLIB_TESTS
+dnl
+
+AC_DEFUN([GLIB_TESTS],
+[
+  AC_ARG_ENABLE(installed-tests,
+                AS_HELP_STRING([--enable-installed-tests],
+                               [Enable installation of some test cases]),
+                [case ${enableval} in
+                  yes) ENABLE_INSTALLED_TESTS="1"  ;;
+                  no)  ENABLE_INSTALLED_TESTS="" ;;
+                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-installed-tests]) ;;
+                 esac])
+  AM_CONDITIONAL([ENABLE_INSTALLED_TESTS], test "$ENABLE_INSTALLED_TESTS" = "1")
+  AC_ARG_ENABLE(always-build-tests,
+                AS_HELP_STRING([--enable-always-build-tests],
+                               [Enable always building tests during 'make all']),
+                [case ${enableval} in
+                  yes) ENABLE_ALWAYS_BUILD_TESTS="1"  ;;
+                  no)  ENABLE_ALWAYS_BUILD_TESTS="" ;;
+                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-always-build-tests]) ;;
+                 esac])
+  AM_CONDITIONAL([ENABLE_ALWAYS_BUILD_TESTS], test "$ENABLE_ALWAYS_BUILD_TESTS" = "1")
+  if test "$ENABLE_INSTALLED_TESTS" == "1"; then
+    AC_SUBST(installed_test_metadir, [${datadir}/installed-tests/]AC_PACKAGE_NAME)
+    AC_SUBST(installed_testdir, [${libexecdir}/installed-tests/]AC_PACKAGE_NAME)
+  fi
+])
diff --git a/packaging/baselibs.conf b/packaging/baselibs.conf
new file mode 100644 (file)
index 0000000..7912078
--- /dev/null
@@ -0,0 +1,4 @@
+glib-networking
+  requires "glib2-tools-<targettype>"
+  post "%glib2_gio_module_post"
+  postun "%glib2_gio_module_postun"
diff --git a/packaging/glib-networking.changes b/packaging/glib-networking.changes
new file mode 100644 (file)
index 0000000..f34d0f0
--- /dev/null
@@ -0,0 +1,28 @@
+* Mon Jun 24 2013 Anas Nashif <anas.nashif@intel.com> 2.36.1@3baa2f4
+- readd baselibs.conf
+- update to 2.36.2
+
+* Sat Apr 27 2013 Anas Nashif <anas.nashif@intel.com> submit/trunk/20130329.123049@4d40c9b
+- Update to 2.36.1
+
+* Fri Mar 29 2013 Anas Nashif <anas.nashif@intel.com> upstream/2.36.0@1b206e3
+- Update to 2.36.0
+
+* Fri Mar 15 2013 Anas Nashif <anas.nashif@intel.com> upstream/2.35.9@38f6a25
+- Update to 2.35.9
+
+* Tue Feb 26 2013 Anas Nashif <anas.nashif@intel.com> upstream/2.35.8@5ca9624
+- Update to 2.35.8
+
+* Mon Feb 25 2013 Anas Nashif <anas.nashif@intel.com> accepted/trunk/20130208.141437@4d0d50b
+- Enable libproxy (base on project)
+
+* Fri Feb 08 2013 Anas Nashif <anas.nashif@intel.com> upstream/2.35.6@7a62e64
+- Update to 2.35.6
+
+* Thu Dec 20 2012 Anas Nashif <anas.nashif@intel.com> upstream/2.35.3@ba439b4
+- update to 2.35.3
+
+* Sun Dec 09 2012 Anas Nashif <anas.nashif@intel.com> upstream/2.35.1@12833a0
+- Imported Upstream version 2.35.1
+
diff --git a/packaging/glib-networking.manifest b/packaging/glib-networking.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
old mode 100644 (file)
new mode 100755 (executable)
index d13e49d..dd9216e
@@ -1,40 +1,82 @@
-Name:       glib-networking
-Summary:    Network extensions for GLib
-Version:    2.32.3_1.8
-Release:    1
-Group:      System/Libraries
-License:    LGPL-2.0+
-URL:        http://git.gnome.org/browse/glib-networking/
-Source0:    %{name}-%{version}.tar.gz
-
-BuildRequires:  pkgconfig(glib-2.0)
-BuildRequires:  pkgconfig(gnutls)
+%bcond_with libproxy
+Name:           glib-networking
+Version:        2.38.0
+Release:        0
+License:        LGPL-2.1+
+Summary:        Network-related GIO modules for glib
+Group:          System/Libraries
+Source:         http://download.gnome.org/sources/glib-networking/2.35/%{name}-%{version}.tar.xz
+Source99:       baselibs.conf
+Source1001:     glib-networking.manifest
+Url:            http://www.gnome.org
 BuildRequires:  intltool
+BuildRequires:  which
+BuildRequires:  libgcrypt-devel
+BuildRequires:  pkgconfig(dbus-1)
+BuildRequires:  pkgconfig(gio-2.0) >= 2.31.6
+BuildRequires:  pkgconfig(gnutls) >= 2.11.0
+BuildRequires:  pkgconfig(dlog)
+%if %{with libproxy}
+BuildRequires:  pkgconfig(libproxy-1.0)
+%endif
 
 %description
-Networking extensions for GLib
+This package contains network-related GIO modules for glib.
 
+Currently, there is only a proxy module based on libproxy.
 
+%lang_package
 
 %prep
-%setup -q -n %{name}-%{version}
+%setup -q
+cp %{SOURCE1001} .
 
 %build
+%autogen \
+    --disable-static \
+%if %{with libproxy}
+    --with-libproxy  \
+%endif
+%if "%{?tizen_profile_name}" == "tv"
+    --enable-tizen-multiple-certificate=yes \
+    --enable-tizen-tv-update-default-priority \
+    --enable-tizen-dlog \
+    --enable-tizen-performance-test-log \
+%endif
+%if "%{?tizen_profile_name}" == "tv"
+    --with-ca-certificates=/opt/share/ca-certificates/
+%else
+    --with-ca-certificates=/opt/share/ca-certificates/ca-certificate.crt
+%endif
 
-%configure --disable-static --without-ca-certificates
-make %{?jobs:-j%jobs}
+%__make %{?_smp_mflags} V=1
 
 %install
+%if "%{?tizen_profile_name}" == "tv"
 rm -rf %{buildroot}
-mkdir -p %{buildroot}/usr/share/license
-cp COPYING %{buildroot}/usr/share/license/%{name}
-
+mkdir -p %{buildroot}/opt/share/ca-certificates/
+cp wss.pem %{buildroot}/opt/share/ca-certificates/
+%endif
 %make_install
+%find_lang %{name}
+
+%post
+%glib2_gio_module_post
 
-%find_lang glib-networking
+%postun
+%glib2_gio_module_postun
 
-%files -f glib-networking.lang
-%defattr(-,root,root,-)
+%files
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%doc COPYING
 %{_libdir}/gio/modules/libgiognutls.so
-/usr/share/license/%{name}
-%manifest glib-networking.manifest
+%if "%{?tizen_profile_name}" == "tv"
+/opt/share/ca-certificates/wss.pem
+%endif
+
+%if %{with libproxy}
+%{_libdir}/gio/modules/libgiolibproxy.so
+%{_libexecdir}/glib-pacrunner
+%{_datadir}/dbus-1/services/org.gtk.GLib.PACRunner.service
+%endif
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644 (file)
index 0000000..e456549
--- /dev/null
@@ -0,0 +1,4 @@
+*.gmo
+glib-networking.pot
+Makefile.in.in
+POTFILES
index 981f600..153fa9b 100644 (file)
@@ -1,3 +1,5 @@
+an
+ar
 as
 be
 bg
@@ -17,6 +19,7 @@ eu
 fa
 fi
 fr
+fur
 gl
 gu
 he
@@ -41,12 +44,14 @@ pt
 pt_BR
 ro
 ru
+sk
 sl
 sr
 sr@latin
 sv
 ta
 te
+tg
 th
 tr
 ug
diff --git a/po/an.po b/po/an.po
new file mode 100644 (file)
index 0000000..ea2051b
--- /dev/null
+++ b/po/an.po
@@ -0,0 +1,145 @@
+# Aragonese translation for glib-networking.
+# Copyright (C) 2013 glib-networking's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glib-networking package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib-networking master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-02-19 13:01+0000\n"
+"PO-Revision-Date: 2013-02-20 01:19+0100\n"
+"Last-Translator: Daniel Martinez <entaltoaragon@gmail.com>\n"
+"Language-Team: Aragonese <softaragones@googlegroups.com>\n"
+"Language: an\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../proxy/libproxy/glibproxyresolver.c:150
+msgid "Proxy resolver internal error."
+msgstr "Error interna d'o proxy."
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:173
+#, c-format
+msgid "Could not parse DER certificate: %s"
+msgstr "No se podió analisar o certificau DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:194
+#, c-format
+msgid "Could not parse PEM certificate: %s"
+msgstr "No se podió analisar o certificau PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
+#, c-format
+msgid "Could not parse DER private key: %s"
+msgstr "No se podió analisar a clau privada DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
+#, c-format
+msgid "Could not parse PEM private key: %s"
+msgstr "No se podió analisar a clau privada PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
+msgid "No certificate data provided"
+msgstr "No s'han proporcionau datos d'o certificau"
+
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
+msgid "Server required TLS certificate"
+msgstr "O servidor requiere un certificau TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
+#, c-format
+msgid "Could not create TLS connection: %s"
+msgstr "No se podió creyar a connexión TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "A connexión ye zarrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1419
+msgid "Operation would block"
+msgstr "A operación se blocará"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+msgid "Peer failed to perform TLS handshake"
+msgstr "O par falló en realizar a negociación TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
+msgid "Peer requested illegal TLS rehandshake"
+msgstr "O par solicitó una renegociación TLS ilegal"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
+msgid "TLS connection closed unexpectedly"
+msgstr "A connexión TLS se zarró inasperadament"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:765
+msgid "TLS connection peer did not send a certificate"
+msgstr "O par d'a connexión TLS no ninvió un certificau"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1146
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1165
+#, c-format
+msgid "Error performing TLS handshake: %s"
+msgstr "Error en realizar a negociación TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1175
+msgid "Server did not return a valid TLS certificate"
+msgstr "O servidor no devolvió un certificau TLS valido"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1250
+msgid "Unacceptable TLS certificate"
+msgstr "Certificau TLS inacceptable"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1442
+#, c-format
+msgid "Error reading data from TLS socket: %s"
+msgstr "Error en leyer datos d'o socket TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1471
+#, c-format
+msgid "Error writing data to TLS socket: %s"
+msgstr "Error en escribir datos en o socket TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1515
+msgid "Connection is already closed"
+msgstr "A connexión ya ye zarrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1525
+#, c-format
+msgid "Error performing TLS close: %s"
+msgstr "Error en zarrar o TLS: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "O certificau no tiene clau privada"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid "This is the last chance to enter the PIN correctly before the token is locked."
+msgstr "Ista ye a zaguera oportunidat ta introducir o PIN correctament antes que se bloque o \"token\"."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
+msgstr "Quantos intentos d'introducir o PIN han estau incorrectos y o \"token\" se blocará dimpués de mas fallos."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "O PIN introduciu ye incorrecto."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "Modulo"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "Puntero d'o modulo PKCS#11"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "ID d'a ranura"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "Identificador d'a ranura de PKCS#11"
+
diff --git a/po/ar.po b/po/ar.po
new file mode 100644 (file)
index 0000000..1f8c2fb
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# IBRAHIM <mradonadiego@hotmail.fr>, 2011
+# Mohammad Alhargan <malham1@gmail.com>, 2012.
+# Khaled Hosny <khaledhosny@eglug.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-09-20 07:26+0200\n"
+"PO-Revision-Date: 2012-09-20 07:26+0200\n"
+"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Virtaal 0.7.0\n"
+"X-Project-Style: gnome\n"
+
+#: ../proxy/libproxy/glibproxyresolver.c:150
+msgid "Proxy resolver internal error."
+msgstr "خطأ داخلي تحليل الوكيل."
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:173
+#, c-format
+msgid "Could not parse DER certificate: %s"
+msgstr "تعذر تحليل شهادة DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:194
+#, c-format
+msgid "Could not parse PEM certificate: %s"
+msgstr "تعذر تحليل شهادة PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
+#, c-format
+msgid "Could not parse DER private key: %s"
+msgstr "تعذر تحليل المفتاح الخاص DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
+#, c-format
+msgid "Could not parse PEM private key: %s"
+msgstr "تعذر تحليل المفتاح الخاص PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
+msgid "No certificate data provided"
+msgstr "لم يتم تقديم بيانات الشهادة"
+
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
+msgid "Server required TLS certificate"
+msgstr "يتطلب الخادوم شهادة TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
+#, c-format
+msgid "Could not create TLS connection: %s"
+msgstr "لا يمكن إنشاء اتصال TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "الاتصال مغلق"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:574
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1377
+msgid "Operation would block"
+msgstr "العملية قد تغلق"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:701
+msgid "Peer failed to perform TLS handshake"
+msgstr "فشل إجراء تعارف نظير TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:718
+msgid "Peer requested illegal TLS rehandshake"
+msgstr "طلب النظير تعارف TLS غير شرعي"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:744
+msgid "TLS connection closed unexpectedly"
+msgstr "تم إغلاق اتصال TLS بشكل غير متوقع"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1055
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1074
+#, c-format
+msgid "Error performing TLS handshake: %s"
+msgstr "خطأ في تعارف TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1210
+msgid "Unacceptable TLS certificate"
+msgstr "شهادة TLS غير مقبولة"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1221
+msgid "Server did not return a valid TLS certificate"
+msgstr "لم يُرجع الخادوم شهادة TLS سليمة"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1400
+#, c-format
+msgid "Error reading data from TLS socket: %s"
+msgstr "حدث خطأ أثناء قراءة البيانات من مأخذ توصيل TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1429
+#, c-format
+msgid "Error writing data to TLS socket: %s"
+msgstr "حدث خطأ أثناء كتابة البيانات من مأخذ توصيل TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1473
+msgid "Connection is already closed"
+msgstr "الاتصال مغلق من قبل"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1483
+#, c-format
+msgid "Error performing TLS close: %s"
+msgstr "خطأ في إغلاق TLS: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "لا يوجد مفتاح خاص للشهادة"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"هذه هي الفرصة الأخيرة لإدخال رقم التعريف الشخصي بشكل صحيح قبل تأمين الرمز "
+"المميز."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"عدة محاولات إدخال رقم التعريف الشخصي غير صحيحة، سيتم تأمين الرمز المميز بعد "
+"المزيد من الفشل."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "رقم التعريف الشخصي الذي أدخلته غير صحيح."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "وحدة نمطية"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "مؤشر الوحدة النمطية PKCS#11"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "معرف المدخل"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "معرف مدخل PKCS#11"
index d090c76..623cc32 100644 (file)
--- a/po/as.po
+++ b/po/as.po
@@ -1,20 +1,21 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
-# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012.
+# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-05 19:36+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-12 18:28+0530\n"
 "Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
-"Language-Team: as_IN <kde-i18n-doc@kde.org>\n"
+"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
+"Language: as\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
@@ -45,53 +46,75 @@ msgstr "PEM ব্যক্তিগত চাবিক বিশ্লেষণ
 msgid "No certificate data provided"
 msgstr "কোনো প্ৰমাণপত্ৰ তথ্য যোগান দিয়া হোৱা নাই"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "চাৰ্ভাৰৰ TLS প্ৰমাণপত্ৰৰ প্ৰয়োজন আছিল"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS সংযোগ সৃষ্টি কৰিব পৰা নগল: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "সংযোগ বন্ধ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "কাৰ্য্য প্ৰতিৰোধ কৰিব"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "TLS হেন্ডশেক কৰিবলে সমনীয়া ব্যৰ্থ হল"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "সমনীয়ায় অবৈধ পুনৰ হেন্ডশেকৰ অনুৰোধ কৰিছিল"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS সংযোগ অপ্ৰত্যাশিতভাৱে বন্ধ হৈ গল"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS সংযোগ সমনীয়ায়ে এটা প্ৰমাণপত্ৰ প্ৰেৰণ নকৰিলে"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS হেন্ডশেক কৰোতে ত্ৰুটি: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "অগ্ৰহণযোগ্য TLS প্ৰমাণপত্ৰ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "চাৰ্ভাৰে এটা বৈধ TLS প্ৰমাণপত্ৰ ঘুৰাই নিদিলে"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS চকেটৰ পৰা তথ্য পঢোতে ত্ৰুটি: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS চকেটলে তথ্য লিখোতে ত্ৰুটি: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "সংযোগ ইতিমধ্যে বন্ধ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS বন্ধ কৰোতে ত্ৰুটি: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "প্ৰমাণপত্ৰৰ কোনো ব্যক্তিগত চাবি নাই"
 
index 0bd3350..1288c4c 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -3,9 +3,10 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-18 23:20+0300\n"
-"PO-Revision-Date: 2012-02-18 23:20+0300\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-08-30 15:27+0300\n"
 "Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
 "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
 "Language: be\n"
@@ -45,48 +46,69 @@ msgstr "Не ўдалося разабраць прыватны PEM-ключ: %s
 msgid "No certificate data provided"
 msgstr "Даныя сертыфіката не пададзеныя"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Сервер запатрабаваў TLS-сертыфікат"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Не ўдалося стварыць TLS-злучэнне: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Злучэнне закрыта"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Аперацыя будзе заблакіравана"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Суразмоўцу не ўдалося выканаць вітанне TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Суразмоўца запытаў забароненае паўторнае вітанне TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-злучэнне нечакана закрылася"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+msgid "TLS connection peer did not send a certificate"
+msgstr "Партнёр па TLS-злучэнні не паслаў сертыфікат"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Памылка выканання вітання TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Непрымальны TLS-сертыфікат"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Сервер не вярнуў правільнага TLS-сертыфіката"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Памылка чытання даных з TLS-сокета: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Памылка запісу даных у TLS-сокет: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Злучэнне ўжо закрыта"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Памылка закрыцця TLS-злучэння: %s"
index 7b30522..1bc33e8 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,21 +1,21 @@
 # Bulgarian translation of glib-networking po-file.
-# Copyright (C) 2011, 2012 Free Software Foundation
+# Copyright (C) 2011, 2012, 2013 Free Software Foundation
 # This file is distributed under the same license as the glib-networking package.
-# Alexander Shopov <ash@kambanaria.org>, 2011, 2012.
+# Alexander Shopov <ash@kambanaria.org>, 2011, 2012, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-08 11:01+0200\n"
-"PO-Revision-Date: 2012-01-08 11:00+0200\n"
+"POT-Creation-Date: 2013-01-08 21:50+0200\n"
+"PO-Revision-Date: 2013-01-08 21:50+0200\n"
 "Last-Translator:  Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language: bg\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -45,51 +45,72 @@ msgstr "Частният ключ във формат PEM не може да б
 msgid "No certificate data provided"
 msgstr "Липсват данни за сертификат"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Сървърът изисква сертификат за TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Не може да се създаде връзка по TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "Връзката е прекъсната"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "Операцията ще блокира"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "Отсрещната страна не осъществи ръкостискане по TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Отсрещната страна изиска неправилно ново ръкостискане по TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "Връзката по TLS неочаквано прекъсна"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "Отсрещната страна за TLS не върна сертификат"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Грешка при ръкостискане по TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "Сървърът върна неправилен сертификат за TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Неприемлив сертификат за TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1025
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Грешка при четене на данни по TLS от гнездо: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1051
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Грешка при запис на данни по TLS към гнездо: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1097
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "Връзката вече е прекъсната"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð·Ð°Ñ\82ваÑ\80Ñ\8fне на TLS: %s"
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¿Ñ\80екÑ\8aÑ\81ване на TLS: %s"
 
 #: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
index 5447be2..a9fabcf 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -2,19 +2,22 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # David Planella <david.planella@gmail.com>, 2011, 2012.
+# Gil Forcada <gilforcada@guifi.net>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-13 00:17+0100\n"
-"PO-Revision-Date: 2012-03-10 11:09+0100\n"
-"Last-Translator: David Planella <david.planella@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-03-05 15:28+0000\n"
+"PO-Revision-Date: 2012-08-16 19:02+0200\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
 "Language-Team: Catalan <gnome-dl@llistes.softcatala.org>\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -46,48 +49,71 @@ msgstr "No s'ha pogut analitzar la clau privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "No s'ha proporcionat cap dada per al certificat"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "El servidor requereix un certificat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "No s'ha pogut crear una connexió TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "La connexió està tancada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "L'operació bloquejaria"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
-msgstr "L'amfitrió no ha pogut realitzar l'encaixada TLS"
+msgstr "L'altre extrem de la connexió no ha pogut realitzar l'encaixada TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
-msgstr "L'amfitrió ha sol·licitat una reencaixada TLS no vàlida"
+msgstr ""
+"L'altre extrem de la connexió ha sol·licitat una reencaixada TLS no vàlida"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "La connexió TLS s'ha tancat de manera inesperada"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "L'altre extrem de la connexió TLS no ha enviat cap certificat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "S'ha produït un error en realitzar l'encaixada TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "El servidor no ha retornat un certificat TLS vàlid"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "No es pot acceptar el certificat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "S'ha produït un error en llegir les dades del sòcol TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "S'ha produït un error en escriure les dades al sòcol TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "La connexió ja està tancada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "S'ha produït un error en realitzar el tancament TLS: %s"
index c877cbb..e2bf8ea 100644 (file)
@@ -2,19 +2,21 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # David Planella <david.planella@gmail.com>, 2011, 2012.
+# Gil Forcada <gilforcada@guifi.net>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-27 22:29+0200\n"
-"PO-Revision-Date: 2012-03-10 11:09+0100\n"
-"Last-Translator: David Planella <david.planella@gmail.com>\n"
+"POT-Creation-Date: 2013-03-17 20:04+0100\n"
+"PO-Revision-Date: 2012-08-16 19:02+0200\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
 "Language-Team: Catalan <gnome-dl@llistes.softcatala.org>\n"
 "Language: ca-XV\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -46,48 +48,71 @@ msgstr "No s'ha pogut analitzar la clau privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "No s'ha proporcionat cap dada per al certificat"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "El servidor requereix un certificat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "No s'ha pogut crear una connexió TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "La connexió està tancada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "L'operació bloquejaria"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
-msgstr "L'amfitrió no ha pogut realitzar l'encaixada TLS"
+msgstr "L'altre extrem de la connexió no ha pogut realitzar l'encaixada TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
-msgstr "L'amfitrió ha sol·licitat una reencaixada TLS no vàlida"
+msgstr ""
+"L'altre extrem de la connexió ha sol·licitat una reencaixada TLS no vàlida"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "La connexió TLS s'ha tancat de manera inesperada"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "L'altre extrem de la connexió TLS no ha enviat cap certificat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "S'ha produït un error en realitzar l'encaixada TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "El servidor no ha retornat un certificat TLS vàlid"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "No es pot acceptar el certificat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "S'ha produït un error en llegir les dades del sòcol TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "S'ha produït un error en escriure les dades al sòcol TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "La connexió ja està tancada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "S'ha produït un error en realitzar el tancament TLS: %s"
index 61bc9aa..a140d96 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,15 +9,16 @@ msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-01-19 12:40+0100\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-12-02 21:47+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
-"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
+"Language: cs\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: cs\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Gtranslator 2.91.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -47,53 +48,75 @@ msgstr "Nelze zpracovat soukromý klíč PEM: %s"
 msgid "No certificate data provided"
 msgstr "Nebyla poskytnuta žádná data certifikátu"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Server požaduje certifikát TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Nelze vytvořit připojení TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Připojení je uzavřeno"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Operace by blokovala"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Protějšek selhal při navazování spojení TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Protějšek požadoval neplatné znovunavázání spojení TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "Připojení TLS bylo neočekávaně zavřeno"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "Protějšek připojení TLS neposlal certifikát"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Chyba při navazování spojení TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Nepřijatelný certifikát TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server nevrátil platný certifikát TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Chyba čtení dat ze soketu TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Chyba zápisu dat do soketu TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Připojení je stále uzavřeno"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Chyba při zavírání TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Certifikát nemá soukromý klíč"
 
index 57eb480..cd003e8 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -1,16 +1,16 @@
 # Danish translation for glib-networking.
-# Copyright (C) 2011-2012 glib-networking's COPYRIGHT HOLDER
+# Copyright (C) 2011-2013 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 #
 # Kris Thomsen <lakristho@gmail.com>, 2011.
-# Ask Hjorth Larsen <asklarsen@gmail.com>, 2012.
+# Ask Hjorth Larsen <asklarsen@gmail.com>, 2012-2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-20 22:30+0100\n"
-"PO-Revision-Date: 2012-02-18 18:59+0100\n"
+"POT-Creation-Date: 2013-03-17 14:55+0100\n"
+"PO-Revision-Date: 2013-03-16 17:43+0100\n"
 "Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
@@ -47,48 +47,70 @@ msgstr "Kunne ikke fortolke privat nøgle for PEM: %s"
 msgid "No certificate data provided"
 msgstr "Ingen certifikatdata angivet"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Server kræver et TLS-certifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Kunne ikke oprette TLS-forbindelse: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "Forbindelsen er lukket"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Forbindelsen ville blokere"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
 msgstr "Modpart mislykkedes i at udføre TLS-forhandling"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Modpart forspurgte illegalt TLS-genforhandling"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-forbindelse lukkede uventet ned"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS-modpart sendte ikke noget certifikat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Fejl under udførsel af TLS-handshake: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Serveren returnerede ikke et gyldigt TLS-certifikat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "Uacceptabelt TLS-certifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Fejl under læsning af data fra TLS-sokkel: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Fejl under skrivning af data til TLS-sokkel: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "Forbindelsen er allerede lukket"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Fejl under nedlukning af TLS: %s"
index ecd5e9b..7a0f693 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -1,25 +1,27 @@
 # German translation for glib-networking.
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2011, 2012.
-# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011.
-# Wolfgang Stöggl <c72578@yahoo.de>, 2011.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2011-2013.
+# Christian Kirbach <Christian.Kirbach@gmail.com>, 2011, 2012.
+# Wolfgang Stöggl <c72578@yahoo.de>, 2011, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-01-06 09:47+0000\n"
-"PO-Revision-Date: 2012-03-04 16:04+0100\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-04 08:30+0100\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: Deutsch <gnome-de@gnome.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: German\n"
 "X-Poedit-Country: GERMANY\n"
+"X-Generator: Gtranslator 2.91.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -49,49 +51,71 @@ msgstr "Geheimer PEM-Schlüssel konnte nicht verarbeitet werden: %s"
 msgid "No certificate data provided"
 msgstr "Keine Zertifikatdaten bereitgestellt"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Server benötigt ein TLS-Zertifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS-Verbindung konnte nicht erstellt werden: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Verbindung ist geschlossen"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Vorgang würde blockieren"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Gegenstelle scheiterte bei Ausführung der TLS-Begrüßung"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Gegenstelle fragte illegale erneute Begrüßung an"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-Verbindung wurde unerwartet geschlossen"
 
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "Gegenstelle der TLS-Verbindung gab kein gültiges Zertifikat zurück"
+
 # Handshake ist ein Fachbegriff für den Vorgang der Verbindungsaushandlung
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Fehler bei der Ausführung des TLS-Handshake: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Nicht akzeptables TLS-Zertifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1025
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server gab kein gültiges TLS-Zertifikat zurück"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Fehler beim Lesen der Daten aus dem TLS-Socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1051
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Fehler beim Schreiben der Daten in den TLS-Socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1097
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Verbindung ist bereits geschlossen"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Fehler beim Schließen der TLS-Verbindung: %s"
index d9dc253..5234177 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -3,20 +3,23 @@
 # This file is distributed under the same license as the glib-networking package.
 # Michael Kotsarinis <mk73628@gmail.com>, 2011.
 # Kostas Papadimas <pkst@gnome.org>, 2012.
+# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-02 12:02+0300\n"
-"PO-Revision-Date: 2012-05-02 12:03+0300\n"
-"Last-Translator: Kostas Papadimas <pkst@gnome.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&k"
+"eywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-12-24 17:24+0300\n"
+"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
 "Language-Team: team@gnome.gr\n"
 "Language: el\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.6.1\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -46,48 +49,70 @@ msgstr "Αδυναμία ανάλυσης ιδιωτικού κλειδιού PE
 msgid "No certificate data provided"
 msgstr "Δεν παρέχονται δεδομένα πιστοποιητικού"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Ο διακομιστής απαίτησε πιστοποιητικό TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Αδύνατη η δημιουργία σύνδεσης TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Η σύνδεση έκλεισε"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Η λειτουργία θα μπλοκαριστεί"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Ο άλλος υπολογιστής απέτυχε να εκτελέσει «χειραψία» TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Ο άλλος υπολογιστής απαίτησε παράτυπη «χειραψία» TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "Η σύνδεση TLS τερματίστηκε απρόσμενα"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:794
-#: ../tls/gnutls/gtlsconnection-gnutls.c:820
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "Η ομότιμη σύνδεση TLS δεν έστειλε πιστοποιητικό"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Σφάλμα κατά τη «χειραψία» TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:868
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Μη αποδεκτό πιστοποιητικό TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1007
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Ο διακομιστής δεν επέστρεψε ένα έγκυρο πιστοποιητικό TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Σφάλμα κατά την ανάγνωση δεδομένων από την υποδοχή TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1033
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Σφάλμα κατά την εγγραφή δεδομένων στην υποδοχή TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1079
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Η σύνδεση έχει ήδη κλείσει"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Σφάλμα κατά το κλείσιμο TLS: %s"
index 8c7bb26..e29a429 100644 (file)
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-06 15:30+0000\n"
-"PO-Revision-Date: 2012-03-06 15:30+0100\n"
+"POT-Creation-Date: 2012-09-05 19:36+0100\n"
+"PO-Revision-Date: 2012-09-05 19:36+0100\n"
 "Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
 "Language-Team: British English <en@li.org>\n"
 "Language: en_GB\n"
@@ -45,48 +45,65 @@ msgstr "Could not parse PEM private key: %s"
 msgid "No certificate data provided"
 msgstr "No certificate data provided"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Server required TLS certificate"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Could not create TLS connection: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Connection is closed"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:574
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1377
+msgid "Operation would block"
+msgstr "Operation would block"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:701
 msgid "Peer failed to perform TLS handshake"
 msgstr "Peer failed to perform TLS handshake"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:718
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Peer requested illegal TLS rehandshake"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:744
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS connection closed unexpectedly"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1055
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1074
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Error performing TLS handshake: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1210
 msgid "Unacceptable TLS certificate"
 msgstr "Unacceptable TLS certificate"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1221
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server did not return a valid TLS certificate"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1400
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Error reading data from TLS socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1429
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Error writing data to TLS socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1473
+msgid "Connection is already closed"
+msgstr "Connection is already closed"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1483
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Error performing TLS close: %s"
index 0e04e37..1e8bbec 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,22 +1,24 @@
 # Spanish translation for glib-networking.
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
-# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011.
 # Jorge González <jorgegonz@svn.gnome.org>, 2011.
+# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2011-11-19 12:42+0100\n"
-"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-12-02 19:10+0100\n"
+"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
 "Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -46,53 +48,75 @@ msgstr "No se pudo analizar la clave privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "No se han proporcionado datos del certificado"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "El servidor requiere un certificado TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "No se pudo crear la conexión TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "La conexión está cerrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "La operación de bloqueará"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "EL par falló al realizar la negociación TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "El par solicitó una renegociación TLS ilegal"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "La conexión TLS se cerró inesperadamente"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "El par de la conexión TLS no envió un certificado"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Error al realizar la negociación TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Certificado TLS inaceptable"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "El servidor no devolvió un certificado TLS válido"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Error al leer datos del socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Error al escribir datos en el socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "La conexión ya está cerrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Error al cerrar el TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "El certificado no tiene clave privada"
 
index 4854906..15e8f91 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -12,14 +12,14 @@ msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-02-28 13:20+0000\n"
-"PO-Revision-Date: 2012-03-01 21:54+0200\n"
+"POT-Creation-Date: 2012-12-18 07:45+0000\n"
+"PO-Revision-Date: 2012-12-18 14:36+0300\n"
 "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
 "Language-Team: Estonian <>\n"
 "Language: et\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bits\n"
+"Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 
 msgid "Proxy resolver internal error."
@@ -51,6 +51,12 @@ msgstr "Server nõudis TLS-sertifikaati"
 msgid "Could not create TLS connection: %s"
 msgstr "TLS-ühendust pole võimalik luua: %s"
 
+msgid "Connection is closed"
+msgstr "Ühendus on suletud"
+
+msgid "Operation would block"
+msgstr "Operatsioon blokeeriks"
+
 msgid "Peer failed to perform TLS handshake"
 msgstr "Partneril ei õnnestunud TLS-kätlust läbi viia"
 
@@ -60,10 +66,16 @@ msgstr "Partneri nõudis lubamatut TLS-kätlust"
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-ühendus suleti ootamatult"
 
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS ühenduse osapool ei tagastanud sertifikaati"
+
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Viga TLS-kätluse läbiviimisel: %s"
 
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server ei tagastanud kehtivat TLS-sertifikaati"
+
 msgid "Unacceptable TLS certificate"
 msgstr "Lubamatu TLS-sertifikaat"
 
@@ -75,6 +87,9 @@ msgstr "Viga TLS-soklist andmete lugemisel: %s"
 msgid "Error writing data to TLS socket: %s"
 msgstr "Viga TLS-soklisse andmete kirjutamisel: %s"
 
+msgid "Connection is already closed"
+msgstr "Ühendus on juba suletud"
+
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Viga TLS-i sulgemisel: %s"
index 81d54af..0fecb7a 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2011, 2012.
+# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: eu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-03 14:44+0100\n"
-"PO-Revision-Date: 2012-03-03 14:46+0100\n"
-"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
-"Language-Team: Basque <kde-i18n-doc@kde.org>\n"
+"POT-Creation-Date: 2013-03-20 09:36+0100\n"
+"PO-Revision-Date: 2013-03-04 23:35+0100\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
+"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
 "Language: eu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -47,48 +48,70 @@ msgstr "Ezin izan da PEM gako pribatua analizatu: %s"
 msgid "No certificate data provided"
 msgstr "Ez da ziurtagiriaren daturik eman"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Zerbitzariak TLS ziurtagiria behar du"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Ezin izan da TLS konexioa sortu: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "Konexioa itxi egin da"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Eragiketa blokea daiteke"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
 msgstr "Parekoak huts egin du TLS diosala lantzean"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Parekoak TLSren diosala ilegala eskatu du"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS konexioa ustekabean itxi da"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS konexioaren parekoak ez du ziurtagiria bidali"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Errorea TLS diosala lantzean: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Zerbitzariak ez du baliozko TLS ziurtagiria itzuli"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "Onartu gabeko TLS ziurtagiria"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Errorea TLS socketetik datuak irakurtzean: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Errorea TLS socketean datuak idaztean: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "Konexioa jadanik itxita dago"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Errorea TLSren itxiera lantzean: %s"
@@ -108,8 +131,8 @@ msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
 msgstr ""
-"Sartu diren hainbat PIN ez dira zuzenak, eta tokena blokeatu "
-"egin da hutsegite gehiagoren ondoren."
+"Sartu diren hainbat PIN ez dira zuzenak, eta tokena blokeatu egin da "
+"hutsegite gehiagoren ondoren."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
@@ -130,4 +153,3 @@ msgstr "Erretenaren IDa"
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
 msgstr "PKCS#11 erretenaren identifikatzailea"
-
index f40e1f0..6731a3b 100644 (file)
--- a/po/fa.po
+++ b/po/fa.po
@@ -1,22 +1,23 @@
 # Persian translation for glib-networking.
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
-# Arash Mousavi <mousavi.arash@gmail.com>, 2011.
+# Arash Mousavi <mousavi.arash@gmail.com>, 2011, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-31 22:22+0330\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-23 18:10+0330\n"
 "Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
 "Language-Team: Persian\n"
+"Language: fa_IR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Persian\n"
-"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -46,63 +47,92 @@ msgstr "تجزیه کلید خصوصی PEM امکان‌پذیر نبود: %s"
 msgid "No certificate data provided"
 msgstr "هیچ اطلاعات گواهینامه‌ای ارائه نشده"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "کارگزار به گواهینامه TLS احتیاج دارد"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "نمی‌توان اتصال TLS ایجاد کرد: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "اتصال بسته شده است"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "عملیات می‌تواند بلوکه شود"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "برقراری TLS handshake توسط همتا شکست خورد"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "همتا درخواست یک TLS rehandshake غیرقانونی کرده است"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "اتصال TLS بطور غیر منتظره‌ای شکست خورد"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "TLS connection closed unexpectedly"
+msgid "TLS connection peer did not send a certificate"
+msgstr "همتا اتصال TLS گواهینامه‌ای ارسال نکرد"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "خطا در هنگام انجام TLS handshake. خطا: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "گواهینامه TLS غیر قابل پذیرش"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+#| msgid "Server required TLS certificate"
+msgid "Server did not return a valid TLS certificate"
+msgstr "کارگزار گواهینامه TLS معتبری ارسال نکرد"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "خطا در هنگام هواندن اطلاعات از طریق سوکت TLS. خط: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "خطا در هنگام نوشتن اطلاعات در سوکت TLS. خطا: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "اتصال از قبل بسته شده است"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "خطا در هنگام انجام بستن TLS. خطا: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "گواهینامه هیچ کلید خصوصی‌ای ندارد"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid "This is the last chance to enter the PIN correctly before the token is locked."
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
 msgstr "آخرین شانس برای صحیح وارد کردن PIN قبل از قفل شدن رمز است."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
-msgstr "تعدادی از تلاش‌های برای وارد کردن PIN شکست خورده است، و رمز پس از شکست‌های بعدی قفل خواهد شد."
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"تعدادی از تلاش‌های برای وارد کردن PIN شکست خورده است، و رمز پس از شکست‌های "
+"بعدی قفل خواهد شد."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
@@ -123,4 +153,3 @@ msgstr "شناسه‌ی جایگاه"
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
 msgstr "شناساگر جایگاه PKCS#11"
-
index 920298d..792afb8 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,25 +1,26 @@
 # Finnish messages for glib-networking
 # Copyright (C) 2011 Tommi Vainikainen
 # This file is distributed under the same license as the glib-networking.
-# Tommi Vainikainen <thv@iki.fi>, 2011.
 #
 # Gnome 2012-03 Finnish translation sprint participants:
 # Jiri Grönroos
+# Tommi Vainikainen <thv@iki.fi>, 2011.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012, 2013.
 msgid ""
 msgstr ""
-""
 "Project-Id-Version: glib-networking\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-12 08:36:57+0000\n"
-"Last-Translator: Tommi Vainikainen <thv@iki.fi>\n"
-"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-20 23:44+0200\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
+"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
+"Language: fi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
 "X-POT-Import-Date: 2012-02-19 15:16:01+0000\n"
-"X-Generator: MediaWiki 1.20alpha (r113129); Translate 2012-03-02\n"
+"X-Generator: Lokalize 1.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
@@ -50,48 +51,70 @@ msgstr "PEM-yksityisavainta ei voitu jäsentää: %s"
 msgid "No certificate data provided"
 msgstr "Varmennetietoja ei tarjottu"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Palvelin vaatii TLS-varmenteen"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Ei voitu luoda TLS-yhteyttä: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Yhteys on suljettu"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Vastapuoli ei kyennyt suoriutumaan TLS-kättelystä"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Vastapuoli pyysi laitonta TLS-uusintakättelyä"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-yhteys katkesi yllättäen"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS-yhteyden vertainen ei lähettänyt varmennetta"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Virhe suoritettaessa TLS-kättelyä: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
-msgstr "Ei hyväksyttävä TLS-varmenne"
+msgstr "TLS-varmenne ei ole hyväksyttävä"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Palvelin ei palauttanut kelvollista TLS-varmennetta"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Virhe luettaessa tietoa TLS-pistokkeesta: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Virhe kirjoitettaessa tietoa TLS-pistokkeeseen: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Yhteys on jo suljettu"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Virhe suoritettaessa TLS-sulkemista: %s"
@@ -101,12 +124,20 @@ msgid "Certificate has no private key"
 msgstr "Varmenteella ei ole yksityistä avainta"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid "This is the last chance to enter the PIN correctly before the token is locked."
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
 msgstr ""
+"Tämä on viimeinen mahdollisuus antaa oikea PIN, ennen kuin valtuus "
+"lukitaan."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
 msgstr ""
+"Useat PIN-yritykset ovat epäonnistuneet, ja valtuus lukitaan seuraavien "
+"epäonnistumisten myötä."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
@@ -114,7 +145,7 @@ msgstr "Syötetty PIN-koodi on virheellinen."
 
 #: ../tls/pkcs11/gpkcs11slot.c:446
 msgid "Module"
-msgstr ""
+msgstr "Moduuli"
 
 #: ../tls/pkcs11/gpkcs11slot.c:447
 msgid "PKCS#11 Module Pointer"
@@ -122,9 +153,9 @@ msgstr ""
 
 #: ../tls/pkcs11/gpkcs11slot.c:454
 msgid "Slot ID"
-msgstr ""
+msgstr "Paikan tunniste"
 
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
-msgstr ""
+msgstr "PKCS#11-paikan tunniste"
 
index fb68291..5508c7a 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,10 +8,11 @@ msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-02-11 11:22+0100\n"
+"POT-Creation-Date: 2013-02-22 13:25+0000\n"
+"PO-Revision-Date: 2013-02-25 20:13+0100\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -45,53 +46,74 @@ msgstr "Impossible d'analyser la clé privée PEM : %s"
 msgid "No certificate data provided"
 msgstr "Aucune donnée de certificat fournie"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Le serveur requiert un certificat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Impossible de créer une connexion TLS : %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "La connexion est fermée"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1419
+msgid "Operation would block"
+msgstr "L'opération serait bloquée"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer failed to perform TLS handshake"
 msgstr "La négociation TLS avec le serveur pair a échoué"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Le serveur pair a demandé une renégociation TLS non autorisée"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "TLS connection closed unexpectedly"
 msgstr "La connexion TLS a été fermée de manière inattendue"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:765
+msgid "TLS connection peer did not send a certificate"
+msgstr "Le pair TLS n'a pas envoyé de certificat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1146
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1165
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Erreur lors de la négociation TLS : %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1175
+msgid "Server did not return a valid TLS certificate"
+msgstr "Le serveur n'a pas renvoyé un certificat TLS valide"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1250
 msgid "Unacceptable TLS certificate"
 msgstr "Certificat TLS inacceptable"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1442
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Erreur lors de la lecture de données du connecteur TLS : %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1471
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Erreur lors de l'écriture de données sur le connecteur TLS : %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1515
+msgid "Connection is already closed"
+msgstr "La connexion est déjà fermée"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1525
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Erreur lors de la fermeture TLS : %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Le certificat n'a pas de clé privée"
 
diff --git a/po/fur.po b/po/fur.po
new file mode 100644 (file)
index 0000000..3ecf4b5
--- /dev/null
+++ b/po/fur.po
@@ -0,0 +1,155 @@
+# Friulian translation for glib-networking.
+# Copyright (C) 2013 glib-networking's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glib-networking package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib-networking master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-03-25 12:43+0000\n"
+"PO-Revision-Date: 2013-03-26 13:02+0100\n"
+"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <fur@li.org>\n"
+"Language: fur\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../proxy/libproxy/glibproxyresolver.c:150
+msgid "Proxy resolver internal error."
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:173
+#, c-format
+msgid "Could not parse DER certificate: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:194
+#, c-format
+msgid "Could not parse PEM certificate: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
+#, c-format
+msgid "Could not parse DER private key: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
+#, c-format
+msgid "Could not parse PEM private key: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
+msgid "No certificate data provided"
+msgstr "Nissun dât di certificât dât"
+
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
+msgid "Server required TLS certificate"
+msgstr "Il server al domande un certificât TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
+#, c-format
+msgid "Could not create TLS connection: %s"
+msgstr "Impussibil creâ la conession TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "La conession a je sierade"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Le operazion a podares blocasi"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
+msgid "Peer failed to perform TLS handshake"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
+msgid "Peer requested illegal TLS rehandshake"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
+msgid "TLS connection closed unexpectedly"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "Il grop di conession TLS nol a inviât un certificât"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#, c-format
+msgid "Error performing TLS handshake: %s"
+msgstr "Erôr tal eseguî il handshake TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Il server nol a tornât un certificât TLS valit"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
+msgid "Unacceptable TLS certificate"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
+#, c-format
+msgid "Error reading data from TLS socket: %s"
+msgstr "Erôr tal lei dâts tal socket TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
+#, c-format
+msgid "Error writing data to TLS socket: %s"
+msgstr "Erôr tal scrivi dâts tal socket TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "La conession a je za sierade"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
+#, c-format
+msgid "Error performing TLS close: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "Il certificât a nol a une clâf privade"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"Cheste a je l'ultime pussibilitât par inserî il PIN coret prime che al vegni "
+"blocât il token."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"A son stâts fats une vore di tentatîfs par meti il PIN, il token al sarà "
+"blocât dopo altris faliments."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "Il PIN dât a nol è coret."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr ""
index 40dc6bc..b85ee17 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -1,29 +1,25 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
-#
 # Copyright © 2011 Leandro Regueiro.
-#
 # Leandro Regueiro <leandro.regueiro@gmail.com>, 2011.
-#
 # Proxecto Trasno - Adaptación do software libre á lingua galega:  Se desexas
 # colaborar connosco, podes atopar máis información en <http://trasno.net>
 # Fran Diéguez <frandieguez@ubuntu.com>, 2011.
-# Fran Dieguez <frandieguez@gnome.org>, 2011.
-#
+# Fran Dieguez <frandieguez@gnome.org>, 2011, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-21 01:50+0100\n"
-"PO-Revision-Date: 2011-11-21 01:51+0100\n"
+"POT-Creation-Date: 2012-12-24 22:51+0100\n"
+"PO-Revision-Date: 2012-12-24 22:52+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
-"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
+"Language-Team: gnome-l10n-gl@gnome.org\n"
 "Language: gl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -53,53 +49,74 @@ msgstr "Non foi posíbel analizar a chave privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "Non se forneceu ningún dato do certificado"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "O servidor require un certificado TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Non foi posíbel crear a conexión TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "A conexión está pechada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "A operación bloquearase"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "O par fallou ao realizar a negociación TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "O par solicitou unha renegociación TLS inaceptábel"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "A conexión TLS pechouse de forma inesperada"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "O par da conexión TLS non enviou un certificado"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Produciuse un erro ao realizar a negociación TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "O servidor non devolveu un certificado TLS válido"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Certificado TLS inaceptábel"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Produciuse un erro ao ler datos do conectador TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Produciuse un erro ao escribir datos no conectador TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "A conexión está pechada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Produciuse un erro ao realizar o peche de TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "O certificado no ten unha chave privada"
 
index 8fb8adb..2760e5f 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-12-10 11:52+0200\n"
-"PO-Revision-Date: 2011-12-10 11:54+0200\n"
+"POT-Creation-Date: 2012-11-30 10:53+0200\n"
+"PO-Revision-Date: 2012-11-30 10:53+0200\n"
 "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
 "Language-Team: Hebrew <sh.yaron@gmail.com>\n"
 "Language: he\n"
@@ -48,48 +48,69 @@ msgstr "לא ניתן לפענח את מפתח ה־PEM הפרטי: %s"
 msgid "No certificate data provided"
 msgstr "לא סופקו נתוני אישור"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "השרת דורש תעודת TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "לא ניתן ליצור חיבור TLS:‏ %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "החיבור סגור"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:577
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1383
+msgid "Operation would block"
+msgstr "הפעולה תיחסם"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:704
 msgid "Peer failed to perform TLS handshake"
 msgstr "העמית נכשל בלחיצת היד מסוג TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:721
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "העמית ביקש לחיצת יד חוזרת מסוג TLS בלתי חוקית"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:747
 msgid "TLS connection closed unexpectedly"
 msgstr "החיבור ל־TLS נסגר באופן בלתי צפוי"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:757
+msgid "TLS connection peer did not send a certificate"
+msgstr "הצד השני בחיבור ה־TLS לא החזיר תעודה"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1065
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1084
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "שגיאה בביצוע לחיצת יד מסוג TLS:‏ %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1229
 msgid "Unacceptable TLS certificate"
 msgstr "אישור ה־TLS אינו מקובל"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1025
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1240
+msgid "Server did not return a valid TLS certificate"
+msgstr "השרת לא החזיר תעודת TLS תקפה"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1406
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "שגיאה בקריאת הנתונים משקע ה־TLS:‏ %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1051
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1435
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "שגיאה בכתיבת נתונים אל שקע ה־TLS:‏ %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1097
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1479
+msgid "Connection is already closed"
+msgstr "החיבור כבר סגור"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1489
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "שגיאה בביצוע סגירת TLS:‏ %s"
index 4ee25f6..9ac799b 100644 (file)
--- a/po/hi.po
+++ b/po/hi.po
@@ -3,22 +3,23 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # Rajesh Ranjan <rranjan@redhat.com>, 2011.
-# chandankumar(ciypro) <chandankumar.093047@gmail.com>, 2012.
+# chandankumar(ciypro) <chandankumar.093047@gmail.com>, 2012, 2013.
+# rajesh <rajeshkajha@yahoo.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking.po.master.hi\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-26 15:28+0530\n"
-"Last-Translator: chandankumar(ciypro) <chandankumar.093047@gmail.com>\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-25 13:35+0000\n"
+"Last-Translator: chandankumar <chandankumar.093047@gmail.com>\n"
 "Language-Team: Hindi <kde-i18n-doc@kde.org>\n"
+"Language: hi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: hi\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 1.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -48,53 +49,75 @@ msgstr "PEM निजी कुंजी नहीं विश्लेषि
 msgid "No certificate data provided"
 msgstr "कोई प्रमाणपत्र आँकड़ा नहीं दिया गया"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "सर्वर के लिए TLS प्रमाणपत्र चाहिए"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "टीएलएस कनेक्शन नहीं बना सका: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "कनेक्शन बंद है"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "कार्य रोक दिया जाएगा"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "TLS हैंडशेक करने में पीयर विफल रहा"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "पीयर ने TLS फिर हैंडशेक के लिए आग्रह किया"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS अप्रत्याशित रूप से बंद हो गया"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS कनेक्शन सहकर्मी एक प्रमाण पत्र नहीं भेजा"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS हैंडशेक करने में त्रुटि: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "अस्वीकार्य TLS प्रमाणपत्र"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "सर्वर ने वैध TLS प्रमाणपत्र नहीं दिया है"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS सॉकेट से आँकड़ा पढ़ने में त्रुटि: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS सॉकेट से आँकड़ा लिखने में त्रुटि: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "कनेक्शन पहले से बंद है"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS बंद करने में त्रुटि: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "प्रमाणपत्र में कोई निजी कुंजी नहीं है"
 
@@ -102,17 +125,15 @@ msgstr "प्रमाणपत्र में कोई निजी कु
 msgid ""
 "This is the last chance to enter the PIN correctly before the token is "
 "locked."
-msgstr ""
-"टोकन बंद होने से पहले पिन सही तरीके से दर्ज करने का यह "
-"आखिरी मौका है."
+msgstr "टोकन बंद होने से पहले पिन सही तरीके से दर्ज करने का यह आखिरी मौका है."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
 msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
 msgstr ""
-"कई पिन प्रयास को गलत कर दिया गया है, और आगे विफलताओं के बाद टोकन बंद "
-"à¤\95र à¤¦à¤¿à¤¯à¤¾ à¤\9cाà¤\8fà¤\97ा."
+"कई पिन प्रयास को गलत कर दिया गया है, और आगे विफलताओं के बाद टोकन बंद कर दिया "
+"जाएगा."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
index 33a4057..a982830 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -1,22 +1,23 @@
 # Hungarian translation of glib-networking
-# Copyright (C) 2011. Free Software Foundation, Inc.
+# Copyright (C) 2011, 2012. Free Software Foundation, Inc.
 # This file is distributed under the same license as the glib-networking package.
 #
 # Gabor Kelemen <kelemeng at gnome dot hu>, 2011, 2012.
+# Balázs Úr <urbalazs at gmail dot com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-04 03:03+0100\n"
-"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
-"Language-Team: Magyar <gnome-hu-list at gnome dot org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-12-31 19:04+0100\n"
+"Last-Translator: Balázs Úr <urbalazs at gmail dot com>\n"
+"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.2\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
@@ -47,53 +48,75 @@ msgstr "A PEM személyes kulcs nem dolgozható fel: %s"
 msgid "No certificate data provided"
 msgstr "Nincsenek megadva tanúsítványadatok"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "A kiszolgáló TLS-tanúsítványt kért"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Nem sikerült létrehozni TLS-kapcsolatot: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "A kapcsolat lezárva"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "A művelet blokkoló lenne"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "A partner nem tudta végrehajtani a TLS-kézfogást"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "A partner illegális ismételt TLS-kézfogást kért"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "A TLS-kapcsolat váratlanul befejeződött"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "A TLS kapcsolat partner nem küldött tanúsítványt"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Hiba a TLS-kézfogás végrehajtásakor: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Elfogadhatatlan TLS-tanúsítvány"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "A kiszolgáló nem adott vissza érvényes TLS-tanúsítványt"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Hiba az adatok olvasásakor a TLS-foglalatból: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Hiba az adatok TLS-foglalatba írásakor: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "A kapcsolat már le van zárva"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Hiba a TLS-lezárás végrehajtásakor: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "A tanúsítványnak nincs személyes kulcsa"
 
index 21a65dc..e0d3bdc 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -1,24 +1,26 @@
 # Indonesian translation of glib-networking
 # Copyright (C) 2011 THE glib-networking'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
-# Andika Triwidada <andika@gmail.com>, 2011.
 #
+# Andika Triwidada <andika@gmail.com>, 2011, 2012, 2013.
+# Dirgita <dirgitadevina@yahoo.co.id>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network\n"
-"POT-Creation-Date: 2011-01-16 20:43+0000\n"
-"PO-Revision-Date: 2011-01-17 11:41+0700\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-29 08:57+0700\n"
 "Last-Translator: Andika Triwidada <andika@gmail.com>\n"
-"Language-Team: GNOME Indonesian Translation Team <gnome@i15n.org>\n"
+"Language-Team: Indonesian <gnome@i15n.org>\n"
+"Language: id\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Poedit-Language: Indonesian\n"
-"X-Poedit-Country: INDONESIA\n"
+"X-Generator: Poedit 1.5.5\n"
 
-#: ../proxy/libproxy/glibproxyresolver.c:142
+#: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
 msgstr "Galat internal resolver proksi."
 
@@ -32,63 +34,122 @@ msgstr "Tak bisa mengurai sertifikat DER: %s"
 msgid "Could not parse PEM certificate: %s"
 msgstr "Tak bisa mengurai sertifikat PEM: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:214
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
 msgstr "Tak bisa mengurai kunci privat DER: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:234
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
 msgstr "Tak bisa mengurai kunci privat PEM: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:275
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Data sertifikat tak disediakan"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:356
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Server memerlukan sertifikat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:241
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Tak bisa membuat koneksi TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:479
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Koneksi ditutup"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Operasi akan memblokir"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Peer gagal melakukan jabat tangan TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:497
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Peer meminta jabat tangan ulang TLS yang ilegal"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:511
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "Koneksi TLS tertutup tak disangka-sangka"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:799
-#: ../tls/gnutls/gtlsconnection-gnutls.c:825
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+msgid "TLS connection peer did not send a certificate"
+msgstr "Pasangan koneksi TLS tak mengembalikan sertifikat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Galat melakukan jabat tangan TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:876
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Sertifikat TLS tak dapat diterima"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1023
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server tak mengembalikan sertifikat TLS yang valid"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Galat saat membaca data dari soket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Galat saat menulis data ke soket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1095
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Koneksi telah ditutup"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Galat melaksanakan penutupan TLS: %s"
 
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "Sertifikatnya tidak memiliki kunci privat"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"Ini kesempatan terakhir memasukkan PIN yang benar sebelum token dikunci."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"Sudah beberapa kali PIN yang dimasukkan salah, token akan dikunci jika "
+"terulang."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "PIN yang dimasukkan salah."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "Modul"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "Pointer Modul PKCS#11"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "ID Slot"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "Identifair Slot PKCS#11"
index 4a5e3d8..ccb4261 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -1,21 +1,21 @@
 # glib-networking Italian translation
-# Copyright (C) 2011 Free Software Foundation, Inc
+# Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc
 # This file is distributed under the same license as the glib-networking package.
 # Luca Ferretti <lferrett@gnome.org>, 2011, 2012.
+# Milo Casagrande <milo@ubuntu.com>, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-02-12 19:21+0000\n"
-"PO-Revision-Date: 2012-02-17 12:46+0100\n"
-"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
-"Language-Team: Italiano <tp@lists.linux.it>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-01-24 22:40+0100\n"
+"PO-Revision-Date: 2013-01-24 22:41+0100\n"
+"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
+"Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
@@ -46,48 +46,69 @@ msgstr "Impossibile analizzare la chiave privata PEM: %s"
 msgid "No certificate data provided"
 msgstr "Nessun dato di certificato fornito"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Il server richiede un certificato TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Impossibile creare la connessione TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "La connessione è chiusa"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "L'operazione potrebbe bloccarsi"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "Il nono non è stato in grado di eseguire l'handshake TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Il nodo ha richesto un re-handshake non lecito"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "La connessione TLS si è chiusa in modo inatteso"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "Il nodo di connessione TLS non ha inviato un certificato"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Errore nell'eseguire l'handshake TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "Il server non ha restituito un certificato TLS valido"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Certificato TLS inammissibile"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Errore nel leggere dati dal socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Errore nello scrivere dati sul socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "La connessione è già chiusa"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Errore nell'eseguire la chiusura TLS: %s"
index f87d9f6..502d620 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -3,25 +3,25 @@
 # This file is distributed under the same license as glib-networking package.
 # Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>, 2011-2012.
 # Hideki Yamane <henrich@debian.org>, 2011-2012.
+# Yoji TOYODA <bsyamato@sea.plala.or.jp>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-03-12 09:02+0000\n"
-"PO-Revision-Date: 2012-03-12 21:04+0900\n"
-"Last-Translator: Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-08-30 12:32+0000\n"
+"PO-Revision-Date: 2012-08-30 21:54+0900\n"
+"Last-Translator: Yoji TOYODA <bsyamato@sea.plala.or.jp>\n"
 "Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
+"Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: ja\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
-msgstr "ã\83\97ã\83­ã\82­ã\82·ã\83¬ã\82¾ã\83«ã\83\90での内部エラー。"
+msgstr "ã\83\97ã\83­ã\82­ã\82·ã\83ªã\82¾ã\83«ã\83\90ã\83¼での内部エラー。"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
@@ -47,48 +47,65 @@ msgstr "PEM 形式の秘密鍵を解析できませんでした: %s"
 msgid "No certificate data provided"
 msgstr "証明書のデータが与えられていません"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "サーバーが TLS 証明書を要求しました"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
-msgstr "TLS の接続を確立できませんでした: %s"
+msgstr "TLS コネクションを確立できませんでした: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "コネクションが切断されています"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:574
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1377
+msgid "Operation would block"
+msgstr "操作がブロックされます"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:701
 msgid "Peer failed to perform TLS handshake"
 msgstr "通信相手が TLS ハンドシェイクの実行に失敗しました"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:718
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "通信相手が不当な TLS の再ハンドシェイクを要求しました"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:744
 msgid "TLS connection closed unexpectedly"
-msgstr "TLS 接続が突然閉じられました"
+msgstr "TLS コネクションが突然閉じられました"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1055
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1074
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS ハンドシェイク実行中のエラー: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1210
 msgid "Unacceptable TLS certificate"
 msgstr "受け付けられない TLS 証明書です"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1221
+msgid "Server did not return a valid TLS certificate"
+msgstr "サーバーが有効な TLS 証明書を返しませんでした。"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1400
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS ソケットからのデータ読み込み中のエラー: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1429
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS ソケットへのデータ書き出し中のエラー: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1473
+msgid "Connection is already closed"
+msgstr "コネクションはすでに切断されています"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1483
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS クローズ実行中のエラー: %s"
@@ -98,19 +115,12 @@ msgid "Certificate has no private key"
 msgstr "証明書に秘密鍵がありません"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid ""
-"This is the last chance to enter the PIN correctly before the token is "
-"locked."
-msgstr ""
-"これがトークンがロックされる前に、正しく PIN を入力する最後のチャンスです。"
+msgid "This is the last chance to enter the PIN correctly before the token is locked."
+msgstr "これがトークンがロックされる前に正しく PIN コードを入力する最後のチャンスです。"
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid ""
-"Several PIN attempts have been incorrect, and the token will be locked after "
-"further failures."
-msgstr ""
-"正しくない PIN 入力が複数回行われたので、さらに失敗するとトークンはロックされ"
-"ます。"
+msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
+msgstr "正しくない PIN コードの入力が複数回行われたので、さらに失敗するとトークンはロックされます。"
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
index 91e21c6..fecabd5 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -1,15 +1,16 @@
 # Korean translation for glib-networking.
 # This file is distributed under the same license as the glib-networking package.
 #
-# Changwoo Ryu <cwryu@debian.org>, 2011-2012.
+# Changwoo Ryu <cwryu@debian.org>, 2011-2013.
 #
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-03-04 18:59+0900\n"
-"PO-Revision-Date: 2012-03-04 19:01+0900\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-12 02:31+0900\n"
 "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
 "Language-Team: Korean <gnome-kr@googlegroups.com>\n"
 "Language: ko\n"
@@ -46,48 +47,69 @@ msgstr "PEM 개인 키를 파싱할 수 없습니다: %s"
 msgid "No certificate data provided"
 msgstr "인증서 데이터를 제공하지 않았습니다"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "서버에 TLS 인증서가 필요합니다"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS 연결을 만들 수 없습니다: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "연결이 닫혔습니다"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "동작이 중단됩니다"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "상대편이 TLS 핸드셰이킹에 실패했습니다"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "상대편이 잘못된 TLS 핸드셰이킹을 요청했습니다"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS 연결이 예상치 못하게 닫혔습니다"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS 연결 상대가 인증서를 보내지 않았습니다"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS 핸드셰이킹에 오류가 발생했습니다: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "TLS 핸드셰이킹을 받아들일 수 없습니다"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "서버에서 올바른 TLS 인증서를 반환하지 않았습니다"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS 소켓에서 데이터를 읽는데 오류가 발생했습니다: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS 소켓에 데이터를 쓰는데 오류가 발생했습니다: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "연결이 이미 닫혔습니다"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS를 닫는데 오류가 발생했습니다: %s"
@@ -106,7 +128,9 @@ msgstr "PIN 입력 마지막 기회입니다. 한 번 더 실패하면 토큰을
 msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
-msgstr "여러 번의 PIN 시도가 모두 틀렸으므로, 앞으로 더 실패하면 해당 토큰을 잠급니다."
+msgstr ""
+"여러 번의 PIN 시도가 모두 틀렸으므로, 앞으로 더 실패하면 해당 토큰을 잠급니"
+"다."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
index 5116ada..0f56c04 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -8,10 +8,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-01-06 09:47+0000\n"
-"PO-Revision-Date: 2012-03-17 18:51+0300\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2012-11-30 21:55+0300\n"
 "Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
 "Language-Team: Lietuvių <>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -45,48 +46,70 @@ msgstr "Nepavyko perskaityti PEM privataus rakto: %s"
 msgid "No certificate data provided"
 msgstr "Nėra pateiktų liudijimo duomenų"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Serveris reikalauja TLS liudijimo"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Nepavyko užmegsti TLS ryšio: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Ryšys užvertas"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Veiksmas blokuosis"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Kita pusė neatliko TLS rankos paspaudimo"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Kita pusė paprašė neteisingo pakartotinio TLS rankos paspaudimo"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS ryšys netikėtai užsivėrė"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS ryšio porininkas neatsiuntė liudijimo"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Klaida atliekant TLS rankos paspaudimą: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Nepriimtinas TLS liudijimas"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1025
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Serveris negrąžino teisingo TLS liudijimo"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Klaida skaitant duomenis iš TLS lizdo: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1051
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Klaida rašant duomenis į TLS lizdą: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1097
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Ryšys jau užvertas"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Klaida atliekant TLS užvėrimą: %s"
index 74525f4..3bbea17 100644 (file)
--- a/po/lv.po
+++ b/po/lv.po
@@ -1,21 +1,21 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
-# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2012.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2012, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-03-24 19:11+0200\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-17 20:22+0200\n"
 "Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
 "Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
+"Language: lv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: lv\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 1.4\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
 "2);\n"
 
@@ -26,74 +26,96 @@ msgstr "Starpnieka risinātāja iekšēja kļūda."
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
 msgid "Could not parse DER certificate: %s"
-msgstr "Nevarēju noparsēt DER sertifikātu: %s"
+msgstr "Nevarēju noparsēt DER sertifikātu — %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:194
 #, c-format
 msgid "Could not parse PEM certificate: %s"
-msgstr "Nevarēju noparsēt PEM sertifikātu: %s"
+msgstr "Nevarēju noparsēt PEM sertifikātu — %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
-msgstr "Nevarēju noparsēt DER privāto atslēgu: %s"
+msgstr "Nevarēju noparsēt DER privāto atslēgu — %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
-msgstr "Nevarēju noparsēt PEM privāto atslēgu: %s"
+msgstr "Nevarēju noparsēt PEM privāto atslēgu — %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Nav norādīti sertifikāta dati"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Serveris pieprasa TLS sertifikātu"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
-msgstr "Neizdevās izveidot TLS savienojumu: %s"
+msgstr "Neizdevās izveidot TLS savienojumu — %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Savienojums ir aizvērts"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Darbība bloķēs"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Dalībniekam neizdevās veikt TLS izaicinājumrokspiedienu"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Dalībnieks pieprasīja neatļautu TLS izaicinājumrokspiedienu"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS savienojums aizvērās negaidīti"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS savienojuma dalībnieks neatsūtīja sertifikātu"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
-msgstr "Kļūda, veicot TLS izaicinājumrokspiedienu: %s"
+msgstr "Kļūda, veicot TLS izaicinājumrokspiedienu — %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Nepieņemams TLS sertifikāts"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Serveris neatgrieza derīgu TLS sertifikātu"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
-msgstr "Kļūda lasot datus no TLS ligzdas: %s"
+msgstr "Kļūda, lasot datus no TLS ligzdas — %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
-msgstr "Kļūda rakstot datus TLS ligzdā: %s"
+msgstr "Kļūda, rakstot datus TLS ligzdā — %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Savienojums jau ir aizvērts"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
-msgstr "Kļūda, veicot TLS aizvēršanu: %s"
+msgstr "Kļūda, veicot TLS aizvēršanu — %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Sertifikātam nav privātās atslēgas"
 
@@ -122,13 +144,13 @@ msgstr "Modulis"
 
 #: ../tls/pkcs11/gpkcs11slot.c:447
 msgid "PKCS#11 Module Pointer"
-msgstr "PKCS#11 Moduļa rādītājs"
+msgstr "PKCS#11 moduļa rādītājs"
 
 #: ../tls/pkcs11/gpkcs11slot.c:454
 msgid "Slot ID"
-msgstr "Slota ID"
+msgstr "Ligzdas ID"
 
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
-msgstr "PKCS#11 slota identifikators"
+msgstr "PKCS#11 ligzdas identifikators"
 
index 6a46a36..4f7e279 100644 (file)
--- a/po/ml.po
+++ b/po/ml.po
@@ -2,19 +2,24 @@
 # Copyright (C) 2012 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # Manoj K <manojkmohanme03107@gmail.com>, 2012.
-#
+# Balasankar Chelamattath <c.balasankar@gmail.com>, 2012
+# Anish A <aneesh.nl@gmail.com>, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-03-20 10:32+0000\n"
-"PO-Revision-Date: 2012-03-20 10:32+0000\n"
-"Last-Translator: Manoj K <manojkmohanme03107@gmail.com>\n"
-"Language-Team: Malayalam <discuss@lists.smc.org.in>\n"
+"POT-Creation-Date: 2013-02-13 18:37+0000\n"
+"PO-Revision-Date: 2013-02-15 11:30+0530\n"
+"Last-Translator: Anish A <aneesh.nl@gmail.com>\n"
+"Language-Team: Swatantra Malayalam Computing\n"
+"Language: ml\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -44,67 +49,89 @@ msgstr "%s :PEM രഹസ്യ കീ പാഴ്സ് ചെയ്യാന
 msgid "No certificate data provided"
 msgstr "സാക്ഷ്യപത്രവിവരങ്ങള്‍ ലഭ്യമല്ല"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "സെര്‍വ്വരിന് TLS സാക്ഷ്യപത്രം ആവശ്യമാണ്. "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "%s :TLS കണക്ഷന്‍ നിര്‍മ്മിക്കാന്‍ സാധിച്ചില്ല"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "ബന്ധം വിച്ഛേദിക്കപ്പെട്ടിരിക്കുന്നു"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1419
+msgid "Operation would block"
+msgstr "പ്രക്രിയ തടസ്സപ്പെടും"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer failed to perform TLS handshake"
 msgstr "TLS ഹാന്‍ഡ്ഷെയ്ക്ക് കാരണം പിയര്‍  പ്രകടനം പരാജയപ്പെട്ടു"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
-msgstr ""
+msgstr "പിയര്‍ നിയമാനുസൃതമല്ലാത്ത TLS ഹസ്തദാനം ആവശ്യപ്പെട്ടിരിക്കുന്നു"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "TLS connection closed unexpectedly"
-msgstr ""
+msgstr "TLS ബന്ധം അപ്രതീക്ഷിതമായി വിച്ഛേദിക്കപ്പെട്ടിരിക്കുന്നു"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:765
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS ബന്ധത്തിന്റെ പീയര്‍ സാക്ഷ്യപത്രം അയ്ച്ചില്ല"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1146
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1165
 #, c-format
 msgid "Error performing TLS handshake: %s"
-msgstr ""
+msgstr "%s: TLS ഹസ്തദാനം നടപ്പിലാക്കുന്നതില്‍ പിഴവ്"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1175
+msgid "Server did not return a valid TLS certificate"
+msgstr "സെര്‍വ്വര്‍ സാധുവായ TLS സാക്ഷ്യപത്രം തന്നില്ല."
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1250
 msgid "Unacceptable TLS certificate"
-msgstr ""
+msgstr "സ്വീകരിക്കാന്‍ പറ്റാത TLS സാക്ഷ്യപത്രം"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1442
 #, c-format
 msgid "Error reading data from TLS socket: %s"
-msgstr ""
+msgstr "%s: TLS സോക്കറ്റില്‍ നിന്നും ഡാറ്റ വായിക്കുന്നതില്‍ പിഴവ് "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1471
 #, c-format
 msgid "Error writing data to TLS socket: %s"
-msgstr ""
+msgstr "%s: TLS സോക്കറ്റിലേക്ക് ഡാറ്റ എഴുതുന്നതില്‍ പിഴവ്"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1515
+msgid "Connection is already closed"
+msgstr "ബന്ധം ഇതിനകം തന്നെ വിച്ഛേദിക്കപ്പെട്ടിരിക്കുന്നു"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1525
 #, c-format
 msgid "Error performing TLS close: %s"
-msgstr ""
+msgstr "%s: TLS അടയ്ക്കുന്നതില്‍ പരാജയപ്പെട്ടിരിക്കുന്നു"
 
 #: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
-msgstr ""
+msgstr "സാക്ഷ്യപത്രത്തിന്് സ്വകാര്യ താക്കോല്‍ ഇല്ല "
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
 msgid ""
 "This is the last chance to enter the PIN correctly before the token is "
 "locked."
-msgstr ""
+msgstr "ഇത് ടോക്കണ്‍ പൂട്ടുന്നതിന് മുന്പായി PIN ശരിയായി കയറ്റാനുള്ള അവസാന അവസരമാണ്"
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
 msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
 msgstr ""
+"ഒട്ടേറെ PIN ശ്രമങ്ങള്‍ പരാജയപ്പെട്ടു, അതിനാല് ഇനിയുള്ള പരാജയങ്ങള്ക്ക് ശേഷം ടോക്കണ്‍ പൂട്ടുന്നു"
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
index 83435cb..6ca6509 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,14 +1,14 @@
 # Norwegian bokmål translation of glib-networking.
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
-# Kjartan Maraas <kmaraas@gnome.org>, 2011-2012.
+# Kjartan Maraas <kmaraas@gnome.org>, 2011-2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: glib-networking 2.31.x\n"
+"Project-Id-Version: glib-networking 2.35.x\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-24 15:17+0100\n"
-"PO-Revision-Date: 2012-01-24 15:18+0100\n"
+"POT-Creation-Date: 2013-01-21 12:27+0100\n"
+"PO-Revision-Date: 2013-01-21 12:27+0100\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
 "Language: \n"
@@ -44,48 +44,69 @@ msgstr "Kunne ikke lese privat PEM-nøkkel: %s"
 msgid "No certificate data provided"
 msgstr "Ingen sertifikatdata oppgitt"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Tjener krever TLS-sertifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Kunne ikke lage TLS-tilkobling: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "Tilkoblingen er lukket"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "Operasjonen ville blokkere"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "Likemann feilet å utføre TLS-håndtrykk"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Likemann ba om ugyldig nytt TLS-håndtrykk"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-tilkobling ble lukket uventet"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "Sidemann for TLS-tilkobling sendte ikke et sertifikat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Feil under utføring av TLS-håndtrykk: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "Tjener returnerte ikke et gyldig TLS-sertifikat"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Uakseptabelt TLS-sertifikat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1025
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Feil under lesing av data fra TLS-plugg: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1051
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Feil under skriving av data til TLS-plugg: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1097
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "Tilkoblingen er allerede lukket"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Feil under utføring av lukking av TLS-tilkobling: %s"
index 6275383..d32c150 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,27 +1,27 @@
 # Dutch translation for glib-networking
-#
 # This file is distributed under the same license as the glib-networking package.
 #
-# Wouter Bolsterlee <wbolster@gnome.org>, 2011
+# Wouter Bolsterlee <wbolster@gnome.org>, 2011–2013
+# Rachid <rachidbm@ubuntu.com>, 2012.
 #
 # Peer - andere kant van de verbinding   (heel vrij vertaald)
-#
 msgid ""
 msgstr ""
 "Project-Id-Version: gconf\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-11 22:17+0100\n"
-"PO-Revision-Date: 2011-02-11 22:17+0100\n"
+"POT-Creation-Date: 2012-06-18 21:07+0200\n"
+"PO-Revision-Date: 2012-06-18 21:07+0200\n"
 "Last-Translator: Wouter Bolsterlee <wbolster@gnome.org>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../proxy/libproxy/glibproxyresolver.c:142
+#: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
-msgstr "Interne fout in proxy-resolver"
+msgstr "Interne fout in proxy-resolver."
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
@@ -33,62 +33,102 @@ msgstr "Kon DER-certificaat niet parsen: %s"
 msgid "Could not parse PEM certificate: %s"
 msgstr "Kon PEM-certificaat niet parsen: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:214
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
 msgstr "Kon DER-privésleutel niet parsen: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:234
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
 msgstr "Kon PEM-privésleutel niet parsen: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:275
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Geen certificaatgegevens opgegeven"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:356
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
 msgid "Server required TLS certificate"
 msgstr "Server vereiste een TLS-certificaat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:241
+#: ../tls/gnutls/gtlsconnection-gnutls.c:202
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Kon geen TLS-verbinding maken: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:479
+#: ../tls/gnutls/gtlsconnection-gnutls.c:482
 msgid "Peer failed to perform TLS handshake"
-msgstr "Andere kant van de verbinding gaf geen TLS-handshake."
+msgstr "Andere kant van de verbinding gaf geen TLS-handshake"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:497
+#: ../tls/gnutls/gtlsconnection-gnutls.c:502
 msgid "Peer requested illegal TLS rehandshake"
-msgstr "Andere kant van de verbinding gaf een ongeldige TLS-handshake."
+msgstr "Andere kant van de verbinding verzocht een ongeldige TLS-rehandshake"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:511
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS-verbinding onverwachts afgebroken"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:799
-#: ../tls/gnutls/gtlsconnection-gnutls.c:825
+#: ../tls/gnutls/gtlsconnection-gnutls.c:795
+#: ../tls/gnutls/gtlsconnection-gnutls.c:821
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Fout bij uitvoeren van TLS-handshake: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:876
+#: ../tls/gnutls/gtlsconnection-gnutls.c:869
 msgid "Unacceptable TLS certificate"
 msgstr "Onacceptabel TLS-certificaat"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1023
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1008
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Fout bij het lezen van de TLS-socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1034
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Fout bij het schrijven naar de TLS-socket: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1095
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1080
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Fout bij sluiten van TLS: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "Certificaat heeft geen privésleutel"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"Dit is de laatste kans om het PIN correct in te voeren voordat de token "
+"ongeldig wordt."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"U heeft meerdere malen een onjuiste PIN ingevoerd. Na verdere mislukte "
+"pogingen wordt de token ongeldig."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "Het ingevoerde PIN is onjuist."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "Module"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "PKCS#11 Module Pointer"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "Slot ID"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "PKCS#11 Slot Identifier"
index fffc8e7..02cd604 100644 (file)
--- a/po/pa.po
+++ b/po/pa.po
@@ -2,24 +2,24 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 #
-# A S Alam <aalam@users.sf.net>, 2011.
+# A S Alam <aalam@users.sf.net>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=glib&component=network\n"
-"POT-Creation-Date: 2011-01-18 11:42+0000\n"
-"PO-Revision-Date: 2011-01-19 08:44+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-02-26 07:18+0530\n"
 "Last-Translator: A S Alam <aalam@users.sf.net>\n"
 "Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
+"Language: paX-Generator: Lokalize 1.2\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: pa"
-"X-Generator: Lokalize 1.2\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.5\n"
 
-#: ../proxy/libproxy/glibproxyresolver.c:142
+#: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
 msgstr "ਪਰਾਕਸੀ ਹੱਲਕਰਤਾ ਅੰਦਰੂਨੀ ਗਲਤੀ ਹੈ।"
 
@@ -33,63 +33,123 @@ msgstr "DER ਸਰਟੀਫਿਕੇਟ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ 
 msgid "Could not parse PEM certificate: %s"
 msgstr "PEM ਸਰਟੀਫਿਕੇਟ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:214
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
 msgstr "DER ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:234
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
 msgstr "PEM ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:275
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "ਕੋਈ ਸਰਟੀਫਿਕੇਟ ਡਾਟਾ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:356
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "ਸਰਵਰ ਨੂੰ TLS ਸਰਟੀਫਿਕੇਤ ਚਾਹੀਦਾ ਹੈ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:241
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS ਕੁਨੈਕਸ਼ਨ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:479
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕੀਤਾ ਗਿਆ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "ਕਾਰਵਾਈ ਰੋਕੀ ਜਾ ਸਕਦੀ ਹੈ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "ਪੀਅਰ TLS ਹੈਂਡਸੇਕ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:497
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "ਪੀਅਰ ਨੇ ਗਲਤ TLS ਮੁੜ-ਹੈਂਡਸੇਕ ਲਈ ਮੰਗ ਕੀਤੀ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:511
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS ਕੁਨੈਕਸ਼ਨ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:799
-#: ../tls/gnutls/gtlsconnection-gnutls.c:825
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS ਕੁਨੈਕਸ਼ਨ ਪੀਅਰ ਨੇ ਸਰਟੀਫਿਕੇਟ ਵਾਪਸ ਨਹੀਂ ਭੇਜਿਆ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS ਹੈਂਡਸੇਕ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:876
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "ਨਾ-ਮਨਜ਼ੂਰ TLS ਸਰਟੀਫਿਕੇਟ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1023
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "ਸਰਵਰ ਨੇ ਠੀਕ TLS ਸਰਟੀਫਿਕੇਟ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ ਹੈ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS ਸਾਕਟ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS ਸਾਕਟ ਲਈ ਡਾਟਾ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1095
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "ਕੁਨੈਕਸ਼ਨ ਪਹਿਲਾਂ ਹੀ ਬੰਦ ਹੈ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS ਬੰਦ ਕਰਨ ਗਲਤੀ: %s"
 
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "ਸਰਟੀਫਿਕੇਟ ਲਈ ਕੋਈ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਨਹੀਂ ਹੈ"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr "ਟੋਕਨ ਦੇ ਲਾਕ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਠੀਕ ਪਿੰਨ ਭਰਨ ਦਾ ਇਹ ਆਖਰੀ ਮੌਕਾ ਹੈ।"
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"ਪਿੰਨ ਭਰਨ ਦੀਆਂ ਕਈ ਕੋਸ਼ਿਸ਼ ਗਲਤ ਹੋਈਆਂ ਹਨ ਅਤੇ ਫੇਰ ਟੋਕਨ ਹੋਰ ਫੇਲ੍ਹ ਦੇ ਬਾਅਦ ਲਾਕ ਹੋ "
+"ਜਾਵੇਗਾ।"
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "ਦਿੱਤਾ ਗਿਆ ਪਿੰਨ ਗਲਤ ਹੈ।"
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "ਮੋਡੀਊਲ"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "PKCS#11 ਮੋਡੀਊਲ ਪੁਆਇੰਟਰ"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "ਸਲਾਟ ID"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "PKCS#11 ਸਲਾਟ ਪਛਾਣਕਰਤਾ"
+
index 479db04..cfa3614 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -4,12 +4,14 @@
 # pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
 # gnomepl@aviary.pl
 # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# Piotr Drąg <piotrdrag@gmail.com>, 2011-2012.
+# Aviary.pl <gnomepl@aviary.pl>, 2011-2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-03 23:48+0100\n"
-"PO-Revision-Date: 2012-03-03 23:49+0100\n"
+"POT-Creation-Date: 2012-12-02 05:57+0100\n"
+"PO-Revision-Date: 2012-12-02 05:58+0100\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <gnomepl@aviary.pl>\n"
 "Language: pl\n"
@@ -49,48 +51,69 @@ msgstr "Nie można przetworzyć klucza prywatnego PEM: %s"
 msgid "No certificate data provided"
 msgstr "Nie podano danych certyfikatu"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Serwer wymaga certyfikatu TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Nie można utworzyć połączenia TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Połączenie jest zamknięte"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:577
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1383
+msgid "Operation would block"
+msgstr "Działanie zablokowałoby"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:704
 msgid "Peer failed to perform TLS handshake"
 msgstr "Wykonanie powitania TLS przez partnera się nie powiodło"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:721
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Partner zażądał niedozwolonego ponownego powitania TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:747
 msgid "TLS connection closed unexpectedly"
 msgstr "Połączenie TLS zostało nieoczekiwanie zamknięte"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:757
+msgid "TLS connection peer did not send a certificate"
+msgstr "Partner połączenia TLS nie wysłał certyfikatu"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1065
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1084
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Błąd podczas wykonywania powitania TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1229
 msgid "Unacceptable TLS certificate"
 msgstr "Nieakceptowalny certyfikat TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1240
+msgid "Server did not return a valid TLS certificate"
+msgstr "Serwer nie zwrócił prawidłowego certyfikatu TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1406
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Błąd podczas odczytywania danych z gniazda TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1435
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Błąd podczas zapisywania danych do gniazda TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1479
+msgid "Connection is already closed"
+msgstr "Połączenie jest już zamknięte"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1489
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Błąd podczas wykonywania zamknięcia TLS: %s"
index 587504f..8c6c529 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -1,14 +1,14 @@
-# Portuguese translation for glib-networking.
-# Copyright © 2011, 2012 glib-networking
-# This file is distributed under the same license as the glib-networking package.
-# Duarte Loreto <happyguy_pt@hotmail.com>, 2011, 2012.
-#
+# Portuguese translation for glib-networking.\r
+# Copyright © 2011, 2012, 2013 glib-networking\r
+# This file is distributed under the same license as the glib-networking package.\r
+# Duarte Loreto <happyguy_pt@hotmail.com>, 2011, 2012, 2013.\r
+# \r
 msgid ""
 msgstr ""
-"Project-Id-Version: 3.4\n"
+"Project-Id-Version: 3.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-12 00:34+0000\n"
-"PO-Revision-Date: 2012-03-12 00:40+0000\n"
+"POT-Creation-Date: 2013-03-15 12:42+0000\n"
+"PO-Revision-Date: 2013-03-15 12:45+0000\n"
 "Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n"
 "Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n"
 "Language: pt\n"
@@ -45,48 +45,70 @@ msgstr "Incapaz de processar a chave privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "Não foram indicados quaisquer dados de certificado"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "O servidor requer um certificado TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Incapaz de criar uma ligação TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "A ligação está fechada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Operação iria bloquear"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
 msgstr "O destino falhao ao estabelecer a ligação (handshake) TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Destino requereu novo handshake TLS ilegal"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "Ligação TLS terminada inesperadamente"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "O parceiro de ligação TLS não enviou um certificado"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Erro ao estabelecer a ligação TLS (handshake): %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "O servidor não devolveu um certificado TLS válido"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "Certificado TLS inaceitável"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Erro ao ler dados do socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Erro ao escrever dados no socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "A ligação já está fechada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Erro ao terminar a ligação TLS: %s"
@@ -100,20 +122,20 @@ msgid ""
 "This is the last chance to enter the PIN correctly before the token is "
 "locked."
 msgstr ""
-"Esta é a última oportunidade para introduzir correctamente o PIN antes "
-"de que o token seja trancado."
+"Esta é a última oportunidade para introduzir corretamente o PIN antes de que "
+"o token seja trancado."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
 msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
 msgstr ""
-"Foram introduzidos vários PINs incorrectos e o token será trancado caso "
+"Foram introduzidos vários PINs incorretos e o token será trancado caso "
 "ocorram mais falhas."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
-msgstr "O PIN introduzido está incorrecto."
+msgstr "O PIN introduzido está incorreto."
 
 #: ../tls/pkcs11/gpkcs11slot.c:446
 msgid "Module"
index 34e435c..d35cf97 100644 (file)
@@ -1,17 +1,20 @@
-# Brazilian Portuguese translation for glib-networking.
-# Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
+# Brazilian Portuguese translation of glib-networking.
+# Copyright (C) 2012 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
-# André Gondim <andregondim@ubuntu.com>, 2011.
+#
+# André Gondim <In memoriam>, 2011.
 # Djavan Fagundes <djavan@comum.org>, 2011.
 # Jonh Wendell <jwendell@gnome.org>, 2012.
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-26 14:55-0300\n"
-"PO-Revision-Date: 2012-02-26 14:54-0300\n"
-"Last-Translator: Jonh Wendell <jwendell@gnome.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-12-09 15:35+0000\n"
+"PO-Revision-Date: 2012-12-02 13:21-0300\n"
+"Last-Translator: Antonio Fernandes C. Neto <fernandesn@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
@@ -47,48 +50,69 @@ msgstr "Não foi possível analisar chave privada PEM: %s"
 msgid "No certificate data provided"
 msgstr "Nenhum dado de certificado fornecido"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
-msgstr "Servidor requer certificado TLS"
+msgstr "O servidor requer certificado TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Não foi possível criar conexão TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "A conexão está encerrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "A operação bloquearia"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "Peer falhou ao realizar negociação TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "O peer requisitou uma negociação TLS ilegal"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "Conexão TLS fechou inesperadamente"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "Conexão TLS não enviou um certificado"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Erro executando negociação TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "Servidor não retornou certificado TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Certificado TLS inaceitável"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Erro ao ler dados do socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Erro ao gravar dados do socket TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "A conexão já está encerrada"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Erro ao executar fechamento TLS: %s"
index ca25bd4..aa4c676 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -2,19 +2,24 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # Pavel Dmitriev <Kitchenknif@gmail.com>, 2011.
+# Yuri Myasoedov <omerta13@yandex.ru>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-02-27 11:26+0300\n"
-"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
-"Language-Team: Russian <gnome-cyr@gnome.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-03-17 13:55+0000\n"
+"PO-Revision-Date: 2013-03-17 23:11+0400\n"
+"Last-Translator: Dmitriy S. Seregin <dseregin@59.ru>\n"
+"Language-Team: русский <gnome-cyr@gnome.org>\n"
+"Language: ru\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: \n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.5.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -44,67 +49,97 @@ msgstr "Не удалось обработать личный ключ PEM: %s"
 msgid "No certificate data provided"
 msgstr "Данные сертификата не предоставлены"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Сервер требует сертификат TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Не удалось создать соединение TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "Соединение закрыто"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Действие будет заблокировано"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
 msgstr "Узлу не удалось квитировать выполнение связи TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Узел запросил недопустимое повторное квитирование связи TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "Соединение TLS неожиданно закрылось"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "Узел, с которым производится TLS-соединение, не предоставил сертификат"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Ошибка выполнения квитирования связи TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Сертификат TLS, возвращённый сервером, не является подлинным"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "Недопустимый сертификат TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Ошибка чтения данных из сокета TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Ошибка записи данных в сокет TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "Соединение было закрыто ранее"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Ошибка закрытия TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "У сертификата нет секретного ключа"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid "This is the last chance to enter the PIN correctly before the token is locked."
-msgstr "Это — последняя возможность ввести корректный PIN перед тем, как токен будет заблокирован."
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"Это — последняя возможность ввести корректный PIN перед тем, как токен будет "
+"заблокирован."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
-msgstr "PIN был несколько раз введён неправильно, токен будет заблокирован после последующих неудачных попыток."
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"PIN был несколько раз введён неправильно, токен будет заблокирован после "
+"последующих неудачных попыток."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
-msgstr "PIN введён правильно."
+msgstr "Введён неверный PIN."
 
 #: ../tls/pkcs11/gpkcs11slot.c:446
 msgid "Module"
@@ -121,4 +156,3 @@ msgstr "ID слота"
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
 msgstr "Идентификатор слота PKCS#11"
-
diff --git a/po/sk.po b/po/sk.po
new file mode 100644 (file)
index 0000000..24d5d47
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,156 @@
+# Slovak translation for glib-networking.
+# Copyright (C) 2012 glib-networking's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glib-networking package.
+# Richard Stanislavský <kenny.vv@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib-networking master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-03-23 16:43+0000\n"
+"PO-Revision-Date: 2013-03-24 13:14+0100\n"
+"Last-Translator: Richard Stanislavský <kenny.vv@gmail.com>\n"
+"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../proxy/libproxy/glibproxyresolver.c:150
+msgid "Proxy resolver internal error."
+msgstr "Vnútorná chyba sprostredkovateľa."
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:173
+#, c-format
+msgid "Could not parse DER certificate: %s"
+msgstr "Nepodarilo sa analyzovať certifikát v kodovaní DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:194
+#, c-format
+msgid "Could not parse PEM certificate: %s"
+msgstr "Nepodarilo sa analyzovať certifikát v kodovaní PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
+#, c-format
+msgid "Could not parse DER private key: %s"
+msgstr "Nepodarilo sa analyzovať súkromný kľúč v kodovaní DER: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
+#, c-format
+msgid "Could not parse PEM private key: %s"
+msgstr "Nepodarilo sa analyzovať súkromný kľúč v kodovaní PEM: %s"
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
+msgid "No certificate data provided"
+msgstr "Nie sú dostupné údaje certifikátu"
+
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
+msgid "Server required TLS certificate"
+msgstr "Server požaduje certifikát pre TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
+#, c-format
+msgid "Could not create TLS connection: %s"
+msgstr "Nepodarilo sa vytvoriť pripojenie s použitím TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "Pripojenie je ukončené"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Operácia by blokovala"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
+msgid "Peer failed to perform TLS handshake"
+msgstr "Partner zlyhal pri vzájomnom spoznaní pomocou TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
+msgid "Peer requested illegal TLS rehandshake"
+msgstr "Partner žiadal nelegálne opätovné vzájomné spoznanie pomocou TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
+msgid "TLS connection closed unexpectedly"
+msgstr "Pripojenie pomocou TLS bolo nečakane ukončené"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "Partner neposlal certifikát pre pripojenie TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#, c-format
+msgid "Error performing TLS handshake: %s"
+msgstr "Chyba vzájomného spoznania s použitím TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server nevrátil platný certifikát pre TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
+msgid "Unacceptable TLS certificate"
+msgstr "Neprijateľný certifikát pre TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
+#, c-format
+msgid "Error reading data from TLS socket: %s"
+msgstr "Chyba pri čítaní údajov zo soketu s použitím TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
+#, c-format
+msgid "Error writing data to TLS socket: %s"
+msgstr "Chyba pri zapisovaní údajov do soketu s použitím TLS: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "Pripojenie je už ukončené"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
+#, c-format
+msgid "Error performing TLS close: %s"
+msgstr "Chyba pri uzatváraní spojenia s použitím TLS: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "Certifikát nemá súkromný kľúč"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"Toto je posledná možnosť na vloženie správneho kódu PIN predtým, ako bude "
+"token uzamknutý."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"Niekoľko pokusov zadať kód PIN bolo nesprávnych, po niekoľkých ďalších "
+"nesprávnych pokusoch bude token uzamknutý."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "Vložený kód PIN je nesprávny."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "Modul"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "Ukazovateľ na modul štandardu PKCS č.11"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "Identifikátor slotu"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "Idntifikátor slotu štandardu PKCS č.11"
index a735403..6342e54 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -7,19 +7,20 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-25 08:54+0000\n"
-"PO-Revision-Date: 2011-11-25 21:11+0100\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-12-18 01:26+0000\n"
+"PO-Revision-Date: 2012-12-18 08:24+0100\n"
 "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
 "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
-"Language: \n"
+"Language: sl_SI\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
-"X-Poedit-Country: SLOVENIA\n"
-"X-Poedit-Language: Slovenian\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -49,63 +50,92 @@ msgstr "Zasebnega ključa PEM ni mogoče razčleniti: %s"
 msgid "No certificate data provided"
 msgstr "Podatki o potrdilu niso bili podani"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Strežnik potrebuje potrdilo TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Povezave TLS ni mogoče ustvariti: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "Povezava je zaprta"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "Opravilo bi zaustavilo delovanje"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
 msgstr "Soležniku ni uspelo izvesti izmenjave signalov TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Soležnik je zahteval nedovoljeno ponovno izmenjavo signalov TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
 msgstr "Povezava TLS se je nepričakovano zaprla"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "Povezani soležnik ni vrnil veljavnega potrdila TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Napaka med izvajanjem izmenjave signalov TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "Strežnik ni vrnil veljavnega potrdila TLS"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "Nesprejemljivo potrdilo TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Napaka med branjem podatkov iz vtiča TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Napaka med zapisovanjem podatkov v vtič TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "Povezava je že zaprta"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Napaka med izvajanjem zapiranja TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Potrdilo nima določenega zasebnega ključa"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid "This is the last chance to enter the PIN correctly before the token is locked."
-msgstr "To je zadnja priložnost za pravilen vnos gesla PIN preden se dostop popolnoma zaklene."
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+"To je zadnja priložnost za pravilen vnos gesla PIN preden se dostop "
+"popolnoma zaklene."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
-msgstr "Več poskusov vnosa gesla PIN je bilo neuspešnih. Vnos bo po ponovni napaki popolnoma zakljenjen."
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"Več poskusov vnosa gesla PIN je bilo neuspešnih. Vnos bo po ponovni napaki "
+"popolnoma zakljenjen."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
@@ -126,4 +156,3 @@ msgstr "ID odkodirnika"
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
 msgstr "Določilo odkodirnika PKCS#11"
-
index 5dadc10..e79a843 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,11 +1,14 @@
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012.
+# Serbian translation of glib-networking
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2013.
+# This file is distributed under the same license as the glib-networking package.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: glib.networking\n"
+"Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&k"
 "eywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-02-12 20:20+0200\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-01-18 11:59+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <gnom@prevod.org>\n"
 "Language: sr\n"
@@ -23,74 +26,96 @@ msgstr "Унутрашња грешка решавача посредника."
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
 msgid "Could not parse DER certificate: %s"
-msgstr "Не могу да рашчланим ДЕР уверење: %s"
+msgstr "Не могу да обрадим ДЕР уверење: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:194
 #, c-format
 msgid "Could not parse PEM certificate: %s"
-msgstr "Не могу да рашчланим ПЕМ уверење: %s"
+msgstr "Не могу да обрадим ПЕМ уверење: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
-msgstr "Не могу да рашчланим приватни ДЕР кључ: %s"
+msgstr "Не могу да обрадим приватни ДЕР кључ: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
-msgstr "Не могу да рашчланим приватни ПЕМ кључ: %s"
+msgstr "Не могу да обрадим приватни ПЕМ кључ: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Нису обезбеђени подаци уверења"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "ТЛС уверење које захтева сервер"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Не могу да направим ТЛС везу: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Веза је затворена"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Поступак би блокирао"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Парњак није успео да изврши ТЛС руковање"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Парњак је затражио илегално ТЛС поновно руковање"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "ТЛС веза је неочекивано затворена"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "Парњак ТЛС везе није послао уверење"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Грешка у извршавању ТЛС руковања: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Неприхватљиво ТЛС уверење"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Сервер није вратио исправно ТЛС уверење"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Грешка приликом читања података са ТЛС прикључка: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Грешка приликом уписивања података у ТЛС прикључак: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Веза је већ затворена"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Грешка у извршавању ТЛС затварања: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Уверење нема приватни кључ"
 
index 9b7d461..1da645a 100644 (file)
@@ -1,11 +1,14 @@
-# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011, 2012.
+# Serbian translation of glib-networking
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2013.
+# This file is distributed under the same license as the glib-networking package.
+# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: glib.networking\n"
+"Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&k"
 "eywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-02-12 20:20+0200\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-01-18 11:59+0200\n"
 "Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <gnom@prevod.org>\n"
 "Language: sr\n"
@@ -23,74 +26,96 @@ msgstr "Unutrašnja greška rešavača posrednika."
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
 msgid "Could not parse DER certificate: %s"
-msgstr "Ne mogu da raščlanim DER uverenje: %s"
+msgstr "Ne mogu da obradim DER uverenje: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:194
 #, c-format
 msgid "Could not parse PEM certificate: %s"
-msgstr "Ne mogu da raščlanim PEM uverenje: %s"
+msgstr "Ne mogu da obradim PEM uverenje: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
-msgstr "Ne mogu da raščlanim privatni DER ključ: %s"
+msgstr "Ne mogu da obradim privatni DER ključ: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
-msgstr "Ne mogu da raščlanim privatni PEM ključ: %s"
+msgstr "Ne mogu da obradim privatni PEM ključ: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Nisu obezbeđeni podaci uverenja"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "TLS uverenje koje zahteva server"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Ne mogu da napravim TLS vezu: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Veza je zatvorena"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Postupak bi blokirao"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Parnjak nije uspeo da izvrši TLS rukovanje"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Parnjak je zatražio ilegalno TLS ponovno rukovanje"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS veza je neočekivano zatvorena"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+#| msgid "Server did not return a valid TLS certificate"
+msgid "TLS connection peer did not send a certificate"
+msgstr "Parnjak TLS veze nije poslao uverenje"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Greška u izvršavanju TLS rukovanja: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Neprihvatljivo TLS uverenje"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Server nije vratio ispravno TLS uverenje"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Greška prilikom čitanja podataka sa TLS priključka: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Greška prilikom upisivanja podataka u TLS priključak: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Veza je već zatvorena"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Greška u izvršavanju TLS zatvaranja: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Uverenje nema privatni ključ"
 
index 3a3187d..2ad3550 100644 (file)
--- a/po/te.po
+++ b/po/te.po
@@ -1,21 +1,24 @@
-# SOME DESCRIPTIVE TITLE.
 # Copyright (C) 2011, 2012 Swecha Telugu Localisation team
 # This file is distributed under the same license as the PACKAGE package.
+#
 # Hari Krishna <hari@swecha.net>, 2011.
 # Bhuvan Krishna <bhuvan@swecha.net>, 2012.
-#
+# Krishnababu Krothapalli <kkrothap@redhat.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-network.master.te\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2012-03-18 08:55+0000\n"
-"PO-Revision-Date: 2012-03-19 13:49+0530\n"
-"Last-Translator: Bhuvan Krishna <bhuvan@swecha.net>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2012-07-18 21:47+0000\n"
+"PO-Revision-Date: 2012-08-14 13:48+0530\n"
+"Last-Translator: Krishnababu Krothapalli <kkrothap@redhat.com>\n"
 "Language-Team: Telugu <Indlinux-telugu@lists.sourceforge.net>\n"
+"Language: te\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 1.4\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -45,48 +48,66 @@ msgstr "PEM స్వంతతాళం  పార్స్ చేయుట క
 msgid "No certificate data provided"
 msgstr "ధృవీకరణపత్ర దత్తాశం అమర్చబడలేదు "
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "TLS ధృవీకరణపత్రము సేవికకు అవసరం "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:248
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS అనుసంధానం సృష్టించడం కుదరుటలేదు: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:508
+msgid "Connection is closed"
+msgstr "అనుసంధానం మూసివేయబడింది"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:568
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1371
+msgid "Operation would block"
+msgstr "ఆపరేషన్ నిరోధించబడును"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:695
 msgid "Peer failed to perform TLS handshake"
 msgstr "TLS హాండ్ షేక్ నెరవేర్చటకు పీర్ విఫలం "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "న్యాయవిరోధమైన TLS తిరిగి హాండ్ షేక్  పీర్ అడిగినది "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:738
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS బంధం ఊహించని విధంగా రద్దైపోయినది "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1068
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS హాండ్ షేక్ నెరవేర్చటలో విఫలం: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1204
 msgid "Unacceptable TLS certificate"
 msgstr "అంగీకరించని TLS ధృవీకరణపత్రము "
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1215
+#| msgid "Server required TLS certificate"
+msgid "Server did not return a valid TLS certificate"
+msgstr "సేవిక చెల్లునటువంటి TLS ధృవీకరణపత్రం తిప్పియీయలేదు"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1394
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS తొర్ర లో దత్తంశం పఠించుటలో దొషం:  %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1423
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS తొర్ర లో దత్తంశం లిఖించుట లో దొషం:  %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1467
+msgid "Connection is already closed"
+msgstr "అనుసంధానం యిప్పటికే మూయబడెను"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS మూయడంలో దోషం: %s"
@@ -96,12 +117,18 @@ msgid "Certificate has no private key"
 msgstr "సర్టిఫికేట్ కు స్వంతతాళం లెదు"
 
 #: ../tls/pkcs11/gpkcs11pin.c:108
-msgid "This is the last chance to enter the PIN correctly before the token is locked."
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
 msgstr "టోకెన్ తాళం వెసె ముందు సరైన PIN ను నమోదు చివరి అవకాశం"
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
-msgid "Several PIN attempts have been incorrect, and the token will be locked after further failures."
-msgstr "మీరు చేసిన అనేక PIN ప్రయత్నాలు సరైనవి కాదు, అందువల్ల తదుపరి తప్పిదాలు జరగకుండా టోకెన్ లాక్ చేయబడినది"
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+"మీరు చేసిన అనేక PIN ప్రయత్నాలు సరైనవి కాదు, అందువల్ల తదుపరి తప్పిదాలు "
+"జరగకుండా టోకెన్ లాక్ చేయబడినది"
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
diff --git a/po/tg.po b/po/tg.po
new file mode 100644 (file)
index 0000000..2cc6215
--- /dev/null
+++ b/po/tg.po
@@ -0,0 +1,151 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Victor Ibragimov <victor.ibragimov@gmail.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Tajik Gnome\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-03-05 15:28+0000\n"
+"PO-Revision-Date: 2013-01-21 18:03+0500\n"
+"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
+"Language-Team: \n"
+"Language: tg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../proxy/libproxy/glibproxyresolver.c:150
+msgid "Proxy resolver internal error."
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:173
+#, c-format
+msgid "Could not parse DER certificate: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:194
+#, c-format
+msgid "Could not parse PEM certificate: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
+#, c-format
+msgid "Could not parse DER private key: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
+#, c-format
+msgid "Could not parse PEM private key: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
+msgid "No certificate data provided"
+msgstr "Ягон иттилооти гувоҳинома таъмин нашудааст"
+
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
+msgid "Server required TLS certificate"
+msgstr "Сервер гувоҳиномаи TLS-ро дархост кардааст"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
+#, c-format
+msgid "Could not create TLS connection: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
+msgid "Peer failed to perform TLS handshake"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
+msgid "Peer requested illegal TLS rehandshake"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
+msgid "TLS connection closed unexpectedly"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#, c-format
+msgid "Error performing TLS handshake: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
+msgid "Unacceptable TLS certificate"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
+#, c-format
+msgid "Error reading data from TLS socket: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
+#, c-format
+msgid "Error writing data to TLS socket: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr ""
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
+#, c-format
+msgid "Error performing TLS close: %s"
+msgstr ""
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "Модул"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr ""
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr ""
index 13bd753..85fe5e7 100644 (file)
--- a/po/th.po
+++ b/po/th.po
@@ -1,23 +1,25 @@
 # Thai translation for glib-networking.
-# Copyright (C) 2011 Free Software Foundation, Inc.
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the glib-networking package.
-# Unticha Pramgoed <unticha@gmail.com>, 2011.
+# Unticha Pramgoed <unticha@gmail.com>, 2011-2012.
+# Theppitak Karoonboonyanan <thep@linux.thai.net>, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-09-23 07:39+0000\n"
-"PO-Revision-Date: 2011-09-24 13:17+0700\n"
-"Last-Translator: Unticha Pramgoed <unticha@gmail.com>\n"
-"Language-Team: th <thai-l10n@googlegroups.com>\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-09 11:45+0700\n"
+"Last-Translator: Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: UTF-8\n"
 "\n"
 
-#: ../proxy/libproxy/glibproxyresolver.c:151
+#: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
 msgstr "เกิดข้อผิดพลาดภายในของบริการเปิดหาพร็อกซี"
 
@@ -31,21 +33,21 @@ msgstr "ไม่สามารถแจงใบรับรอง DER: %s"
 msgid "Could not parse PEM certificate: %s"
 msgstr "ไม่สามารถแจงใบรับรอง PEM: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:214
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
 msgstr "ไม่สามารถแจงกุญแจส่วนตัว DER: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:234
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
 msgstr "ไม่สามารถแจงกุญแจส่วนตัว PEM: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:275
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "ไม่มีข้อมูลใบรับรอง"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:386
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "เซิร์ฟเวอร์ต้องการใบรับรอง TLS"
 
@@ -54,39 +56,96 @@ msgstr "เซิร์ฟเวอร์ต้องการใบรับร
 msgid "Could not create TLS connection: %s"
 msgstr "ไม่สามารถสร้างการเชื่อมต่อ TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:529
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "การเชื่อมต่อถูกปิดไปแล้ว"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "ปฏิบัติการจะบล็อค"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "อีกฝ่ายหนึ่งดำเนินการ TLS handshake ไม่สำเร็จ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:547
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "อีกฝ่ายหนึ่งร้องขอ TLS rehandshake ไม่ถูกต้อง"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:565
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "การเชื่อมต่อ TLS ปิดอย่างกะทันหัน"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:859
-#: ../tls/gnutls/gtlsconnection-gnutls.c:885
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+msgid "TLS connection peer did not send a certificate"
+msgstr "คู่สายการเชื่อมต่อ TLS ไม่ส่งใบรับรองมา"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "เกิดข้อผิดพลาดขณะดำเนินการ TLS handshake: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:924
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "ใบรับรอง TLS ไม่เป็นที่ยอมรับ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1073
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "เซิร์ฟเวอร์ไม่คืนใบรับรอง TLS ที่ถูกต้อง"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลจากซ็อกเก็ต TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "เกิดข้อผิดพลาดขณะเขียนข้อมูลลงซ็อกเก็ต TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1145
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "การเชื่อมต่อถูกปิดไปเรียบร้อยแล้ว"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "เกิดข้อผิดพลาดขณะดำเนินการปิด TLS: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "ใบรับรองไม่มีกุญแจส่วนตัว"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr "นี่เป็นโอกาสสุดท้ายที่จะป้อน PIN ให้ถูกต้อง ก่อนโทเค็นจะถูกล็อค"
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr "ป้อน PIN ผิดมาแล้วหลายครั้ง และโทเค็นจะถูกล็อคถ้ายังป้อนผิดอีก"
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "PIN ที่ป้อนไม่ถูกต้อง"
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "มอดูล"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "ตัวชี้มอดูล PKCS#11"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "หมายเลข Slot"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "ตัวระบุ Slot PKCS#11"
index 5a649aa..5b7d948 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -3,22 +3,24 @@
 # This file is distributed under the same license as the glib-networking package.
 #
 # Muhammed Eken <gnome@m-eken.com>, 2011.
-# Muhammet Kara <muhammet.k@gmail.com>, 2011, 2012.
+# Ozan Çağlayan <ozancag@gmail.com>, 2013.
+# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2013.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-01-04 10:17+0000\n"
-"Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n"
-"Language-Team: Turkish <gnome-turk@gnome.org>\n"
+"POT-Creation-Date: 2013-04-03 16:39+0000\n"
+"PO-Revision-Date: 2013-04-08 12:09+0300\n"
+"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
+"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
+"Language: tr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"Language: tr\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Gtranslator 2.91.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -27,74 +29,96 @@ msgstr "Proxy çözücü iç hatası."
 #: ../tls/gnutls/gtlscertificate-gnutls.c:173
 #, c-format
 msgid "Could not parse DER certificate: %s"
-msgstr "DER sertifikası çözümlenemedi: %s"
+msgstr "DER sertifikası ayrıştırılamadı: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:194
 #, c-format
 msgid "Could not parse PEM certificate: %s"
-msgstr "PEM sertifikası çözümlenemedi: %s"
+msgstr "PEM sertifikası ayrıştırılamadı: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
-msgstr "DER özel anahtarı çözümlenemedi: %s"
+msgstr "DER özel anahtarı ayrıştırılamadı: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
-msgstr "PEM özel anahtarı çözümlenemedi: %s"
+msgstr "PEM özel anahtarı ayrıştırılamadı: %s"
 
 #: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "Sertifika verisi sağlanmadı"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
-msgstr "Sunucu TLS sertifikası gerekli"
+msgstr "Sunucu TLS sertifikası talep etti"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS bağlantısı oluşturulamadı: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "Bağlantı kapalı"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1425
+msgid "Operation would block"
+msgstr "Bloke eden işlem"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "Peer failed to perform TLS handshake"
-msgstr "TLS eş anlaşması gerçekleştirilemedi"
+msgstr "Uç, TLS el sıkışmasını başaramadı"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
-msgstr "Eş, kural dışı TLS anlaşması talep etti"
+msgstr "Uç, kural dışı TLS el sıkışması talep etti"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:761
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS bağlantısı beklenmedik şekilde sonlandı"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:771
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS bağlantı ucu sertifika göndermedi"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1152
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
 #, c-format
 msgid "Error performing TLS handshake: %s"
-msgstr "TLS anlaşmasında hata gerçekleşti: %s"
+msgstr "TLS el sıkışması sırasında hata: %s"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1181
+msgid "Server did not return a valid TLS certificate"
+msgstr "Sunucu geçerli bir TLS sertifikası döndürmedi"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1256
 msgid "Unacceptable TLS certificate"
 msgstr "TLS sertifikası kabul edilemez"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1448
 #, c-format
 msgid "Error reading data from TLS socket: %s"
-msgstr "TLS soketinde veri okuma hatası: %s"
+msgstr "TLS soketinden veri okurken hata: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error writing data to TLS socket: %s"
-msgstr "TLS soketinde veri yazma hatası: %s"
+msgstr "TLS soketine veri yazarken hata: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1521
+msgid "Connection is already closed"
+msgstr "Bağlantı zaten kapalı"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1531
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS kapatma işleminde hata: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Sertifikanın özel anahtarı yok"
 
@@ -103,20 +127,18 @@ msgid ""
 "This is the last chance to enter the PIN correctly before the token is "
 "locked."
 msgstr ""
-"Bu, simge kilitlenmeden önce PIN kodunu doğru olarak girmek için son "
-"şansınızdır."
+"Bu, simge (token) kilitlenmeden önce PIN kodunu doğru girmeniz için son "
+"şanstır."
 
 #: ../tls/pkcs11/gpkcs11pin.c:110
 msgid ""
 "Several PIN attempts have been incorrect, and the token will be locked after "
 "further failures."
-msgstr ""
-"PIN birden çok kez yanlış girildi, ve tekrar yanlış girilmesi halinde simge "
-"kilitlenecektir."
+msgstr "PIN daha fazla yanlış girilirse simge (token) kilitlenecektir."
 
 #: ../tls/pkcs11/gpkcs11pin.c:112
 msgid "The PIN entered is incorrect."
-msgstr "Girilen PIN hatalıdır."
+msgstr "Girilen PIN hatalı."
 
 #: ../tls/pkcs11/gpkcs11slot.c:446
 msgid "Module"
@@ -133,4 +155,3 @@ msgstr "Yuva Kimliği (Slot ID)"
 #: ../tls/pkcs11/gpkcs11slot.c:455
 msgid "PKCS#11 Slot Identifier"
 msgstr "PKCS#11 Yuva Tanımlayıcısı"
-
index f17f1a5..9f955b2 100644 (file)
--- a/po/ug.po
+++ b/po/ug.po
@@ -2,20 +2,21 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # Gheyret Kenji <gheyret@yahoo.com>, 2010.
-# 
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network\n"
-"POT-Creation-Date: 2011-02-04 22:21+0000\n"
-"PO-Revision-Date: 2011-01-31 15:04+0000\n"
-"Last-Translator: Gheyret Kenji <gheyret@yahoo.com>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=network\n"
+"POT-Creation-Date: 2013-01-20 10:45+0000\n"
+"PO-Revision-Date: 2013-02-22 22:21+0900\n"
+"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n"
 "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../proxy/libproxy/glibproxyresolver.c:142
+#: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
 msgstr "ۋاكالەتچى ھەل قىلغۇچ ئىچكى خاتالىقى."
 
@@ -29,62 +30,119 @@ msgstr "DER ئىسپاتنامىسىنى يېشەلمىدى: %s"
 msgid "Could not parse PEM certificate: %s"
 msgstr "PEM ئىسپاتنامىسىنى يېشەلمىدى: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:214
+#: ../tls/gnutls/gtlscertificate-gnutls.c:225
 #, c-format
 msgid "Could not parse DER private key: %s"
 msgstr "DER شەخسىي ئاچقۇچىنى يېشەلمىدى: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:234
+#: ../tls/gnutls/gtlscertificate-gnutls.c:256
 #, c-format
 msgid "Could not parse PEM private key: %s"
 msgstr "PEM شەخسىي ئاچقۇچىنى يېشەلمىدى: %s"
 
-#: ../tls/gnutls/gtlscertificate-gnutls.c:275
+#: ../tls/gnutls/gtlscertificate-gnutls.c:296
 msgid "No certificate data provided"
 msgstr "ئىسپاتنامە سانلىق-مەلۇماتلىرى تەمىنلەنمىگەن"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:356
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "مۇلازىمېتىر TLS ئىسپاتنامىسى تەلەپ قىلىدۇ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:241
+#: ../tls/gnutls/gtlsconnection-gnutls.c:257
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "TLS باغلىنىشى قۇرالمىدى:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:479
+#: ../tls/gnutls/gtlsconnection-gnutls.c:518
+msgid "Connection is closed"
+msgstr "باغلىنىش تاقالدى"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:580
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1417
+msgid "Operation would block"
+msgstr "مەشغۇلات توسۇلىدۇ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:710
 msgid "Peer failed to perform TLS handshake"
-msgstr "Peer(باشقىلار) TLS بىلەن سالاملىشىشتا مەغلۇپ بولدى"
+msgstr "قارىشى تەرەپ TLS سالىمىدا مەغلۇپ بولدى"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:497
+#: ../tls/gnutls/gtlsconnection-gnutls.c:727
 msgid "Peer requested illegal TLS rehandshake"
-msgstr "Peer(باشقىلار) TLS بىلەن قايتا سالاملىشىشتا ناتوغرا سالام قىلدى"
+msgstr "Peer(باشقىلار) TLS قايتا سالىمىدا ناتوغرا سالام قىلدى"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:511
+#: ../tls/gnutls/gtlsconnection-gnutls.c:753
 msgid "TLS connection closed unexpectedly"
-msgstr "TLS باغلىنىشى ئويلىمىغان يەردىن تاقىلىپ قالدى"
+msgstr "قارىشى تەرەپ توغرا بولمىغان TLS سالىمىنى تەلەپ قىلدى"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:799
-#: ../tls/gnutls/gtlsconnection-gnutls.c:825
+#: ../tls/gnutls/gtlsconnection-gnutls.c:763
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS باغلىنىشىدىكى قارىشى تەرەپ گۇۋاھنامىنى ئەۋەتمىدى"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1144
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1163
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "TLS بىلەن سالاملىشىشتا خاتالىق كۆرۈلدى: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:876
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1173
+msgid "Server did not return a valid TLS certificate"
+msgstr "مۇلازىمېتىر ئىناۋەتلىك TLS گۇۋاھنامىسىنى قايتۇرمىدى"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1248
 msgid "Unacceptable TLS certificate"
 msgstr "قوبۇل قىلىنمايدىغان ئىسپاتنامە"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1023
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1440
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "TLS سوكېتىدىن سانلىق-مەلۇمات ئوقۇشتا خاتالىق كۆرۈلدى: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1469
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "TLS سوكېتىغا سانلىق-مەلۇمات يېزىشتا خاتالىق كۆرۈلدى: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1095
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1513
+msgid "Connection is already closed"
+msgstr "باغلىنىش ئاللىقاچان تاقالغان"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1523
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "TLS تاقاش مەشغۇلاتىدا خاتالىق كۆرۈلدى: %s"
+
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
+msgid "Certificate has no private key"
+msgstr "گۇۋاھنامىنىڭ شەخسىي ئاچقۇچى يوق ئىكەن"
+
+#: ../tls/pkcs11/gpkcs11pin.c:108
+msgid ""
+"This is the last chance to enter the PIN correctly before the token is "
+"locked."
+msgstr "بۇ سىزنىڭ ئەڭ ئاخىرقى پۇرسىتىڭىز. يەنە خاتالاشسىڭىز قۇلۇپلىنىپ قالىدۇ."
+
+#: ../tls/pkcs11/gpkcs11pin.c:110
+msgid ""
+"Several PIN attempts have been incorrect, and the token will be locked after "
+"further failures."
+msgstr "بىر قانچە قېتىم خاتالاشتىڭىز. يەنە خاتالاشسىڭىز قۇلۇپلىنىپ قالىدۇ."
+
+#: ../tls/pkcs11/gpkcs11pin.c:112
+msgid "The PIN entered is incorrect."
+msgstr "كىرگۈزگەن PIN توغرا ئەمەس."
+
+#: ../tls/pkcs11/gpkcs11slot.c:446
+msgid "Module"
+msgstr "بۆلەك"
+
+#: ../tls/pkcs11/gpkcs11slot.c:447
+msgid "PKCS#11 Module Pointer"
+msgstr "PKCS#11 بۆلەك كۆرسەتكۈچى"
+
+#: ../tls/pkcs11/gpkcs11slot.c:454
+msgid "Slot ID"
+msgstr "ئوقۇر ID"
+
+#: ../tls/pkcs11/gpkcs11slot.c:455
+msgid "PKCS#11 Slot Identifier"
+msgstr "PKCS#11 ئوقۇر كىملىكى"
index f562ba0..fbaa936 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,17 +1,18 @@
 # Vietnamese translation for glib-networking.
 # Copyright (C) 2011 glib-networking's Free Software Foundation, Inc.
 # This file is distributed under the same license as the glib-networking package.
-# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2011-2012.
+# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2011-2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 01:32+0000\n"
-"PO-Revision-Date: 2012-01-06 16:46+0700\n"
+"POT-Creation-Date: 2012-11-29 22:09+0000\n"
+"PO-Revision-Date: 2013-03-02 20:35+0700\n"
 "Last-Translator: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n"
 "Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
+"Language: vi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -45,53 +46,74 @@ msgstr "Không thể phân tích khoá riêng PEM: %s"
 msgid "No certificate data provided"
 msgstr "Chưa cung cấp thông tin chứng nhận"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "Máy chủ yêu cầu chứng nhận TLS"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:254
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "Không thể tạo kết nối TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:514
+msgid "Connection is closed"
+msgstr "Kết nối đã đóng"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1382
+msgid "Operation would block"
+msgstr "Thao tác có thể ngăn các thao tác khác"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:703
 msgid "Peer failed to perform TLS handshake"
 msgstr "Bên kia không thực hiện bắt tay TLS được"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:720
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "Bên kia yêu cầu bắt tay TLS lại không hợp lệ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:746
 msgid "TLS connection closed unexpectedly"
 msgstr "Kết nối TLS kết thúc bất ngờ"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:756
+msgid "TLS connection peer did not send a certificate"
+msgstr "Phía bên kia kết nối TLS không gửi chứng nhận"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1064
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1083
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "Lỗi thực hiện bắt tay TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1228
 msgid "Unacceptable TLS certificate"
 msgstr "Chứng nhận TLS không thể chấp nhận"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1239
+msgid "Server did not return a valid TLS certificate"
+msgstr "Máy chủ không trả về chứng nhận TLS hợp lệ"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1405
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "Lỗi đọc dữ liệu từ kết nối TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1434
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "Lỗi đọc dữ liệu vào kết nối TLS: %s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1478
+msgid "Connection is already closed"
+msgstr "Kết nối đã đóng rồi"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1488
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "Lỗi đóng kết nối TLS: %s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "Chứng nhận không có khoá riêng"
 
index 4d99832..709c7e2 100644 (file)
@@ -2,19 +2,23 @@
 # Copyright (C) 2011 glib-networking's COPYRIGHT HOLDER
 # This file is distributed under the same license as the glib-networking package.
 # Funda Wang <fundawang@gmail.com>, 2011
+# YunQiang Su <wzssyqa@gmail.com>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=network\n"
-"POT-Creation-Date: 2011-11-19 11:45+0000\n"
-"PO-Revision-Date: 2011-11-19 20:37+0800\n"
-"Last-Translator: Funda Wang <fundawang@gmail.com>\n"
-"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
+"POT-Creation-Date: 2012-07-18 21:47+0000\n"
+"PO-Revision-Date: 2012-09-23 04:06+0800\n"
+"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
+"Content-Transfer-Encoding: 8bits\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.5\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -44,53 +48,71 @@ msgstr "无法分析 PEM 私钥:%s"
 msgid "No certificate data provided"
 msgstr "没有提供证书数据"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:385
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "服务器需要 TLS 证书"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:279
+#: ../tls/gnutls/gtlsconnection-gnutls.c:248
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "无法创建 TLS 连接:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:558
+#: ../tls/gnutls/gtlsconnection-gnutls.c:508
+msgid "Connection is closed"
+msgstr "连接被关闭"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:568
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1371
+msgid "Operation would block"
+msgstr "操作被阻塞"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:695
 msgid "Peer failed to perform TLS handshake"
 msgstr "执行 TLS 握手失败"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:576
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "请求了无效的 TLS 再握手"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:594
+#: ../tls/gnutls/gtlsconnection-gnutls.c:738
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS 连接被异常关闭"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
-#: ../tls/gnutls/gtlsconnection-gnutls.c:914
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1049
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1068
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "执行 TLS 握手时出错:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:962
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1204
 msgid "Unacceptable TLS certificate"
 msgstr "无法接受的 TLS 证书"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1215
+#| msgid "Server required TLS certificate"
+msgid "Server did not return a valid TLS certificate"
+msgstr "服务器未返回有效的 TLS 证书"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1394
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "从 TLS 套接字读取数据时出错:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1125
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1423
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "向 TLS 套接字写入数据时出错:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1171
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1467
+msgid "Connection is already closed"
+msgstr "连接已经关闭"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1477
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "执行 TLS 关闭时出错:%s"
 
-#: ../tls/gnutls/gtlsserverconnection-gnutls.c:138
+#: ../tls/gnutls/gtlsserverconnection-gnutls.c:103
 msgid "Certificate has no private key"
 msgstr "证书没有私钥"
 
index 4f93566..24bbc6d 100644 (file)
@@ -7,14 +7,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking 2.31.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-29 22:59+0800\n"
-"PO-Revision-Date: 2012-01-29 22:59+0800\n"
+"POT-Creation-Date: 2013-03-01 22:24+0800\n"
+"PO-Revision-Date: 2013-03-01 22:24+0800\n"
 "Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
 "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -44,48 +45,69 @@ msgstr "無法解析 PEM 編碼的私人密碼匙:%s"
 msgid "No certificate data provided"
 msgstr "沒有提供證書資料"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "伺服器要求的 TLS 證書"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "無法建立 TLS 連線:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "連線已關閉"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1419
+msgid "Operation would block"
+msgstr "操作會阻擋"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer failed to perform TLS handshake"
 msgstr "執行 TLS 交握對等失敗"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "對等要求了不合法的 TLS 重交握"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS 連線無預警的關閉了"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:765
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS 連線對等點沒有傳回證書"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1146
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1165
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "執行 TLS 交握時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1175
+msgid "Server did not return a valid TLS certificate"
+msgstr "伺服器沒有回傳有效的 TLS 證書"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1250
 msgid "Unacceptable TLS certificate"
 msgstr "不接受的 TLS 證書"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1442
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "從 TLS socket 讀取資料時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1471
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "當寫入資料到 TLS socket 時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1515
+msgid "Connection is already closed"
+msgstr "連線已經關閉"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1525
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "執行 TLS 關閉時發生錯誤:%s"
index 92bf1f3..2e37ec0 100644 (file)
@@ -7,14 +7,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: glib-networking 2.31.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-29 22:59+0800\n"
-"PO-Revision-Date: 2012-01-25 10:14+0800\n"
+"POT-Creation-Date: 2013-03-01 22:24+0800\n"
+"PO-Revision-Date: 2013-02-28 09:41+0800\n"
 "Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
 "Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: ../proxy/libproxy/glibproxyresolver.c:150
 msgid "Proxy resolver internal error."
@@ -44,48 +45,69 @@ msgstr "無法解析 PEM 編碼的私鑰:%s"
 msgid "No certificate data provided"
 msgstr "沒有提供憑證資料"
 
-#: ../tls/gnutls/gtlsclientconnection-gnutls.c:349
+#: ../tls/gnutls/gtlsclientconnection-gnutls.c:309
 msgid "Server required TLS certificate"
 msgstr "伺服器要求的 TLS 憑證"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:202
+#: ../tls/gnutls/gtlsconnection-gnutls.c:258
 #, c-format
 msgid "Could not create TLS connection: %s"
 msgstr "無法建立 TLS 連線:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:481
+#: ../tls/gnutls/gtlsconnection-gnutls.c:520
+msgid "Connection is closed"
+msgstr "連線已關閉"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:582
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1419
+msgid "Operation would block"
+msgstr "操作會阻擋"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:712
 msgid "Peer failed to perform TLS handshake"
 msgstr "執行 TLS 交握對等失敗"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:501
+#: ../tls/gnutls/gtlsconnection-gnutls.c:729
 msgid "Peer requested illegal TLS rehandshake"
 msgstr "對等要求了不合法的 TLS 重交握"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:519
+#: ../tls/gnutls/gtlsconnection-gnutls.c:755
 msgid "TLS connection closed unexpectedly"
 msgstr "TLS 連線無預警的關閉了"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:814
-#: ../tls/gnutls/gtlsconnection-gnutls.c:840
+#: ../tls/gnutls/gtlsconnection-gnutls.c:765
+msgid "TLS connection peer did not send a certificate"
+msgstr "TLS 連線對等點沒有傳回憑證"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1146
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1165
 #, c-format
 msgid "Error performing TLS handshake: %s"
 msgstr "執行 TLS 交握時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:888
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1175
+msgid "Server did not return a valid TLS certificate"
+msgstr "伺服器沒有回傳有效的 TLS 憑證"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1250
 msgid "Unacceptable TLS certificate"
 msgstr "不接受的 TLS 憑證"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1027
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1442
 #, c-format
 msgid "Error reading data from TLS socket: %s"
 msgstr "從 TLS socket 讀取資料時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1053
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1471
 #, c-format
 msgid "Error writing data to TLS socket: %s"
 msgstr "當寫入資料到 TLS socket 時發生錯誤:%s"
 
-#: ../tls/gnutls/gtlsconnection-gnutls.c:1099
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1515
+msgid "Connection is already closed"
+msgstr "連線已經關閉"
+
+#: ../tls/gnutls/gtlsconnection-gnutls.c:1525
 #, c-format
 msgid "Error performing TLS close: %s"
 msgstr "執行 TLS 關閉時發生錯誤:%s"
index 7ec792a..458a8a8 100644 (file)
@@ -1,4 +1,4 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
 giomodule_LTLIBRARIES = libgiognomeproxy.la
 
@@ -8,7 +8,7 @@ libgiognomeproxy_la_SOURCES =           \
        gnome-proxy-module.c            \
        $(NULL)
 
-INCLUDES += $(GSETTINGS_DESKTOP_SCHEMAS_CFLAGS)
+AM_CPPFLAGS += $(GSETTINGS_DESKTOP_SCHEMAS_CFLAGS)
 
 libgiognomeproxy_la_LDFLAGS = $(module_flags)
 libgiognomeproxy_la_LIBADD =           \
index 3c4d63c..464e3d6 100644 (file)
 #define GNOME_PROXY_SOCKS_HOST_KEY        "host"
 #define GNOME_PROXY_SOCKS_PORT_KEY        "port"
 
-typedef struct {
-  gchar        *name;
-  gint          length;
-  gushort       port;
-} GProxyResolverGnomeDomain;
+/* We have to has-a GSimpleProxyResolver rather than is-a one,
+ * because a dynamic type cannot reimplement an interface that
+ * its parent also implements... for some reason.
+ */
 
 struct _GProxyResolverGnome {
   GObject parent_instance;
 
+  GProxyResolver *base_resolver;
+
   GSettings *proxy_settings;
   GSettings *http_settings;
   GSettings *https_settings;
@@ -71,17 +72,13 @@ struct _GProxyResolverGnome {
   gchar *autoconfig_url;
   gboolean use_same_proxy;
 
-  GPtrArray *ignore_ips;
-  GProxyResolverGnomeDomain *ignore_domains;
-
-  gchar *http_proxy, *https_proxy;
-  gchar *ftp_proxy, *socks_authority;
-
   GDBusProxy *pacrunner;
 
   GMutex lock;
 };
 
+static GProxyResolverInterface *g_proxy_resolver_gnome_parent_iface;
+
 static void g_proxy_resolver_gnome_iface_init (GProxyResolverInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyResolverGnome,
@@ -96,27 +93,6 @@ g_proxy_resolver_gnome_class_finalize (GProxyResolverGnomeClass *klass)
 }
 
 static void
-free_settings (GProxyResolverGnome *resolver)
-{
-  int i;
-
-  if (resolver->ignore_ips)
-    g_ptr_array_free (resolver->ignore_ips, TRUE);
-  if (resolver->ignore_domains)
-    {
-      for (i = 0; resolver->ignore_domains[i].name; i++)
-       g_free (resolver->ignore_domains[i].name);
-      g_free (resolver->ignore_domains);
-    }
-
-  g_free (resolver->http_proxy);
-  g_free (resolver->https_proxy);
-  g_free (resolver->ftp_proxy);
-  g_free (resolver->socks_authority);
-  g_free (resolver->autoconfig_url);
-}
-
-static void
 gsettings_changed (GSettings   *settings,
                   const gchar *key,
                   gpointer     user_data)
@@ -159,12 +135,12 @@ g_proxy_resolver_gnome_finalize (GObject *object)
                                            (gpointer)gsettings_changed,
                                            resolver);
       g_object_unref (resolver->socks_settings);
-
-      free_settings (resolver);
     }
 
-  if (resolver->pacrunner)
-    g_object_unref (resolver->pacrunner);
+  g_clear_object (&resolver->base_resolver);
+  g_clear_object (&resolver->pacrunner);
+
+  g_free (resolver->autoconfig_url);
 
   g_mutex_clear (&resolver->lock);
 
@@ -176,6 +152,8 @@ g_proxy_resolver_gnome_init (GProxyResolverGnome *resolver)
 {
   g_mutex_init (&resolver->lock);
 
+  resolver->base_resolver = g_simple_proxy_resolver_new (NULL, NULL);
+
   resolver->proxy_settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
   g_signal_connect (resolver->proxy_settings, "changed",
                    G_CALLBACK (gsettings_changed), resolver);
@@ -203,121 +181,69 @@ g_proxy_resolver_gnome_init (GProxyResolverGnome *resolver)
 static void
 update_settings (GProxyResolverGnome *resolver)
 {
+  GSimpleProxyResolver *simple = G_SIMPLE_PROXY_RESOLVER (resolver->base_resolver);
   gchar **ignore_hosts;
-  gchar *host;
+  gchar *host, *http_proxy, *proxy;
   guint port;
-  int i;
 
   resolver->need_update = FALSE;
 
-  free_settings (resolver);
+  g_free (resolver->autoconfig_url);
+  g_simple_proxy_resolver_set_default_proxy (simple, NULL);
+  g_simple_proxy_resolver_set_ignore_hosts (simple, NULL);
+  g_simple_proxy_resolver_set_uri_proxy (simple, "http", NULL);
+  g_simple_proxy_resolver_set_uri_proxy (simple, "https", NULL);
+  g_simple_proxy_resolver_set_uri_proxy (simple, "ftp", NULL);
 
   resolver->mode =
     g_settings_get_enum (resolver->proxy_settings, GNOME_PROXY_MODE_KEY);
   resolver->autoconfig_url =
     g_settings_get_string (resolver->proxy_settings, GNOME_PROXY_AUTOCONFIG_URL_KEY);
-  resolver->use_same_proxy =
-    g_settings_get_boolean (resolver->proxy_settings, GNOME_PROXY_USE_SAME_PROXY_KEY);
 
-  ignore_hosts =
-    g_settings_get_strv (resolver->proxy_settings, GNOME_PROXY_IGNORE_HOSTS_KEY);
-  if (ignore_hosts && ignore_hosts[0])
+  if (resolver->mode == G_DESKTOP_PROXY_MODE_AUTO && !resolver->pacrunner)
     {
-      GPtrArray *ignore_ips;
-      GArray *ignore_domains;
-      gchar *host, *tmp, *colon, *bracket;
-      GInetAddress *iaddr;
-      GInetAddressMask *mask;
-      GProxyResolverGnomeDomain domain;
-      gushort port;
-
-      ignore_ips = g_ptr_array_new_with_free_func (g_object_unref);
-      ignore_domains = g_array_new (TRUE, FALSE, sizeof (GProxyResolverGnomeDomain));
-
-      for (i = 0; ignore_hosts[i]; i++)
-       {
-         host = g_strchomp (ignore_hosts[i]);
-
-         /* See if it's an IP address or IP/length mask */
-         mask = g_inet_address_mask_new_from_string (host, NULL);
-         if (mask)
-           {
-             g_ptr_array_add (ignore_ips, mask);
-             continue;
-           }
-
-         port = 0;
-
-         if (*host == '[')
-           {
-             /* [IPv6]:port */
-             host++;
-             bracket = strchr (host, ']');
-             if (!bracket || !bracket[1] || bracket[1] != ':')
-               goto bad;
-
-             port = strtoul (bracket + 2, &tmp, 10);
-             if (*tmp)
-               goto bad;
-
-             *bracket = '\0';
-           }
-         else
-           {
-             colon = strchr (host, ':');
-             if (colon && !strchr (colon + 1, ':'))
-               {
-                 /* hostname:port or IPv4:port */
-                 port = strtoul (colon + 1, &tmp, 10);
-                 if (*tmp)
-                   goto bad;
-                 *colon = '\0';
-               }
-           }
-
-         iaddr = g_inet_address_new_from_string (host);
-         if (iaddr)
-           g_object_unref (iaddr);
-         else
-           {
-             if (g_str_has_prefix (host, "*."))
-               host += 2;
-             else if (*host == '.')
-               host++;
-           }
-
-         memset (&domain, 0, sizeof (domain));
-         domain.name = g_strdup (host);
-         domain.length = strlen (domain.name);
-         domain.port = port;
-         g_array_append_val (ignore_domains, domain);
-         continue;
-
-       bad:
-         g_warning ("Ignoring invalid ignore_hosts value '%s'", host);
-       }
-
-      if (ignore_ips->len)
-       resolver->ignore_ips = ignore_ips;
-      else
+      GError *error = NULL;
+      resolver->pacrunner =
+       g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+                                      G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+                                      G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
+                                      NULL,
+                                      "org.gtk.GLib.PACRunner",
+                                      "/org/gtk/GLib/PACRunner",
+                                      "org.gtk.GLib.PACRunner",
+                                      NULL, &error);
+      if (error)
        {
-         g_ptr_array_free (ignore_ips, TRUE);
-         resolver->ignore_ips = NULL;
+         g_warning ("Could not start proxy autoconfiguration helper:"
+                    "\n    %s\nProxy autoconfiguration will not work",
+                    error->message);
        }
-
-      resolver->ignore_domains = (GProxyResolverGnomeDomain *)
-       g_array_free (ignore_domains, ignore_domains->len == 0);
     }
-  else
+  else if (resolver->mode != G_DESKTOP_PROXY_MODE_AUTO && resolver->pacrunner)
     {
-      resolver->ignore_ips = NULL;
-      resolver->ignore_domains = NULL;
+      g_object_unref (resolver->pacrunner);
+      resolver->pacrunner = NULL;
     }
+
+  ignore_hosts =
+    g_settings_get_strv (resolver->proxy_settings, GNOME_PROXY_IGNORE_HOSTS_KEY);
+  g_simple_proxy_resolver_set_ignore_hosts (simple, ignore_hosts);
   g_strfreev (ignore_hosts);
 
+  if (resolver->mode == G_DESKTOP_PROXY_MODE_AUTO)
+    {
+      /* We use the base_resolver to handle ignore_hosts in the AUTO case,
+       * so we have to set a non-"direct://" default proxy so we can distinguish
+       * the two cases.
+       */
+       g_simple_proxy_resolver_set_default_proxy (simple, "use-proxy:");
+    }
+
+  if (resolver->mode != G_DESKTOP_PROXY_MODE_MANUAL)
+    return;
+
   host = g_settings_get_string (resolver->http_settings, GNOME_PROXY_HTTP_HOST_KEY);
   port = g_settings_get_int (resolver->http_settings, GNOME_PROXY_HTTP_PORT_KEY);
-
   if (host && *host)
     {
       if (g_settings_get_boolean (resolver->http_settings, GNOME_PROXY_HTTP_USE_AUTH_KEY))
@@ -332,125 +258,139 @@ update_settings (GProxyResolverGnome *resolver)
          enc_password = g_uri_escape_string (password, NULL, TRUE);
          g_free (password);
 
-         resolver->http_proxy = g_strdup_printf ("http://%s:%s@%s:%u",
-                                                 enc_user, enc_password,
-                                                 host, port);
+         http_proxy = g_strdup_printf ("http://%s:%s@%s:%u",
+                                       enc_user, enc_password,
+                                       host, port);
          g_free (enc_user);
          g_free (enc_password);
        }
       else
-       resolver->http_proxy = g_strdup_printf ("http://%s:%u", host, port);
+       http_proxy = g_strdup_printf ("http://%s:%u", host, port);
+
+      g_simple_proxy_resolver_set_uri_proxy (simple, "http", http_proxy);
+      if (g_settings_get_boolean (resolver->proxy_settings, GNOME_PROXY_USE_SAME_PROXY_KEY))
+       g_simple_proxy_resolver_set_default_proxy (simple, http_proxy);
     }
+  else
+    http_proxy = NULL;
   g_free (host);
 
   host = g_settings_get_string (resolver->https_settings, GNOME_PROXY_HTTPS_HOST_KEY);
   port = g_settings_get_int (resolver->https_settings, GNOME_PROXY_HTTPS_PORT_KEY);
   if (host && *host)
-    resolver->https_proxy = g_strdup_printf ("http://%s:%u", host, port);
-  g_free (host);
-
-  host = g_settings_get_string (resolver->ftp_settings, GNOME_PROXY_FTP_HOST_KEY);
-  port = g_settings_get_int (resolver->ftp_settings, GNOME_PROXY_FTP_PORT_KEY);
-  if (host && *host)
-    resolver->ftp_proxy = g_strdup_printf ("ftp://%s:%u", host, port);
+    {
+      proxy = g_strdup_printf ("http://%s:%u", host, port);
+      g_simple_proxy_resolver_set_uri_proxy (simple, "https", proxy);
+      g_free (proxy);
+    }
+  else if (http_proxy)
+    g_simple_proxy_resolver_set_uri_proxy (simple, "https", http_proxy);
   g_free (host);
 
   host = g_settings_get_string (resolver->socks_settings, GNOME_PROXY_SOCKS_HOST_KEY);
   port = g_settings_get_int (resolver->socks_settings, GNOME_PROXY_SOCKS_PORT_KEY);
   if (host && *host)
-    resolver->socks_authority = g_strdup_printf ("%s:%u", host, port);
+    {
+      proxy = g_strdup_printf ("socks://%s:%u", host, port);
+      g_simple_proxy_resolver_set_default_proxy (simple, proxy);
+      g_free (proxy);
+    }
   g_free (host);
 
-  if (resolver->mode == G_DESKTOP_PROXY_MODE_AUTO && !resolver->pacrunner)
+  g_free (http_proxy);
+
+  host = g_settings_get_string (resolver->ftp_settings, GNOME_PROXY_FTP_HOST_KEY);
+  port = g_settings_get_int (resolver->ftp_settings, GNOME_PROXY_FTP_PORT_KEY);
+  if (host && *host)
     {
-      GError *error = NULL;
-      resolver->pacrunner =
-       g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
-                                      G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
-                                      G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
-                                      NULL,
-                                      "org.gtk.GLib.PACRunner",
-                                      "/org/gtk/GLib/PACRunner",
-                                      "org.gtk.GLib.PACRunner",
-                                      NULL, &error);
-      if (error)
-       {
-         g_warning ("Could not start proxy autoconfiguration helper:"
-                    "\n    %s\nProxy autoconfiguration will not work",
-                    error->message);
-       }
-    }
-  else if (resolver->mode != G_DESKTOP_PROXY_MODE_AUTO && resolver->pacrunner)
-    {
-      g_object_unref (resolver->pacrunner);
-      resolver->pacrunner = NULL;
+      proxy = g_strdup_printf ("ftp://%s:%u", host, port);
+      g_simple_proxy_resolver_set_uri_proxy (simple, "ftp", proxy);
+      g_free (proxy);
     }
+  g_free (host);
 }
 
 static gboolean
 g_proxy_resolver_gnome_is_supported (GProxyResolver *object)
 {
-  GProxyResolverGnome *resolver = G_PROXY_RESOLVER_GNOME (object);
+  const char *session;
+
+  if (g_getenv ("GNOME_DESKTOP_SESSION_ID"))
+    return TRUE;
+
+  session = g_getenv ("DESKTOP_SESSION");
+  if (session == NULL)
+    return FALSE;
+
+  return g_str_has_prefix (session, "gnome") ||
+         strcmp (session, "ubuntu") == 0;
+}
+
+static inline gchar **
+make_proxies (const gchar *proxy)
+{
+  gchar **proxies;
 
-  return resolver->proxy_settings != NULL;
+  proxies = g_new (gchar *, 2);
+  proxies[0] = g_strdup (proxy);
+  proxies[1] = NULL;
+
+  return proxies;
 }
 
+/* Threadsafely determines what to do with @uri; returns %FALSE if an
+ * error occurs, %TRUE and an array of proxies if the mode is NONE or
+ * MANUAL, or if @uri is covered by ignore-hosts, or %TRUE and a
+ * (transfer-full) pacrunner and autoconfig url if the mode is AUTOMATIC.
+ */
 static gboolean
-ignore_host (GProxyResolverGnome *resolver,
-            const gchar         *host,
-            gushort              port)
+g_proxy_resolver_gnome_lookup_internal (GProxyResolverGnome   *resolver,
+                                       const gchar           *uri,
+                                       gchar               ***out_proxies,
+                                       GDBusProxy           **out_pacrunner,
+                                       gchar                **out_autoconfig_url,
+                                       GCancellable          *cancellable,
+                                       GError               **error)
 {
-  gchar *ascii_host = NULL;
-  gboolean ignore = FALSE;
-  gint i, length, offset;
+  gchar **proxies = NULL;
 
-  if (resolver->ignore_ips)
-    {
-      GInetAddress *iaddr;
+  *out_proxies = NULL;
+  *out_pacrunner = NULL;
+  *out_autoconfig_url = NULL;
 
-      iaddr = g_inet_address_new_from_string (host);
-      if (iaddr)
-       {
-         for (i = 0; i < resolver->ignore_ips->len; i++)
-           {
-             GInetAddressMask *mask = resolver->ignore_ips->pdata[i];
-
-             if (g_inet_address_mask_matches (mask, iaddr))
-               {
-                 ignore = TRUE;
-                 break;
-               }
-           }
-
-         g_object_unref (iaddr);
-         if (ignore)
-           return TRUE;
-       }
-    }
+  g_mutex_lock (&resolver->lock);
+  if (resolver->need_update)
+    update_settings (resolver);
 
-  if (g_hostname_is_non_ascii (host))
-    host = ascii_host = g_hostname_to_ascii (host);
-  length = strlen (host);
+  proxies = g_proxy_resolver_lookup (resolver->base_resolver,
+                                    uri, cancellable, error);
+  if (!proxies)
+    goto done;
+
+  /* Parent class does ignore-host handling */
+  if (!strcmp (proxies[0], "direct://") && !proxies[1])
+    goto done;
 
-  if (resolver->ignore_domains)
+  if (resolver->pacrunner)
     {
-      for (i = 0; resolver->ignore_domains[i].length; i++)
-       {
-         GProxyResolverGnomeDomain *domain = &resolver->ignore_domains[i];
-
-         offset = length - domain->length;
-         if ((domain->port == 0 || domain->port == port) &&
-             (offset == 0 || (offset > 0 && host[offset - 1] == '.')) &&
-             (g_ascii_strcasecmp (domain->name, host + offset) == 0))
-           {
-             ignore = TRUE;
-             break;
-           }
-       }
+      g_clear_pointer (&proxies, g_strfreev);
+      *out_pacrunner = g_object_ref (resolver->pacrunner);
+      *out_autoconfig_url = g_strdup (resolver->autoconfig_url);
+      goto done;
     }
 
-  g_free (ascii_host);
-  return ignore;
+ done:
+  g_mutex_unlock (&resolver->lock);
+
+  if (proxies)
+    {
+      *out_proxies = proxies;
+      return TRUE;
+    }
+  else if (*out_pacrunner)
+    return TRUE;
+  else
+    return FALSE;
 }
 
 static gchar **
@@ -460,39 +400,22 @@ g_proxy_resolver_gnome_lookup (GProxyResolver  *proxy_resolver,
                               GError         **error)
 {
   GProxyResolverGnome *resolver = G_PROXY_RESOLVER_GNOME (proxy_resolver);
-  GSocketConnectable *addr = NULL;
-  const gchar *scheme = NULL, *host = NULL;
-  const gchar *proxy = "direct://";
-  gchar **proxies = NULL;
-  gushort port;
-
-  g_mutex_lock (&resolver->lock);
-  if (resolver->need_update)
-    update_settings (resolver);
-  g_mutex_unlock (&resolver->lock);
-
-  if (resolver->mode == G_DESKTOP_PROXY_MODE_NONE)
-    goto done;
-
-  /* FIXME: use guri when it lands... */
-  addr = g_network_address_parse_uri (uri, 0, error);
-  if (!addr)
-    goto done;
-  scheme = g_network_address_get_scheme (G_NETWORK_ADDRESS (addr));
-  host = g_network_address_get_hostname (G_NETWORK_ADDRESS (addr));
-  port = g_network_address_get_port (G_NETWORK_ADDRESS (addr));
+  GDBusProxy *pacrunner;
+  gchar **proxies, *autoconfig_url;
 
-  if (ignore_host (resolver, host, port))
-    goto done;
+  if (!g_proxy_resolver_gnome_lookup_internal (resolver, uri,
+                                              &proxies, &pacrunner, &autoconfig_url,
+                                              cancellable, error))
+    return NULL;
 
-  if (resolver->pacrunner)
+  if (pacrunner)
     {
       GVariant *vproxies;
 
-      vproxies = g_dbus_proxy_call_sync (resolver->pacrunner,
+      vproxies = g_dbus_proxy_call_sync (pacrunner,
                                         "Lookup",
                                         g_variant_new ("(ss)",
-                                                       resolver->autoconfig_url,
+                                                       autoconfig_url,
                                                        uri),
                                         G_DBUS_CALL_FLAGS_NONE,
                                         -1,
@@ -502,42 +425,13 @@ g_proxy_resolver_gnome_lookup (GProxyResolver  *proxy_resolver,
          g_variant_get (vproxies, "(^as)", &proxies);
          g_variant_unref (vproxies);
        }
-    }
-  else if (resolver->ftp_proxy &&
-          (!strcmp (scheme, "ftp") || !strcmp (scheme, "ftps")))
-    {
-      proxy = resolver->ftp_proxy;
-    }
-  else if (resolver->https_proxy && !strcmp (scheme, "https"))
-    {
-      proxy = resolver->https_proxy;
-    }
-  else if (resolver->http_proxy &&
-      (!strcmp (scheme, "http") || !strcmp (scheme, "https")))
-    {
-      proxy = resolver->http_proxy;
-    }
-  else if (resolver->socks_authority)
-    {
-      proxies = g_new0 (gchar *, 4);
-      proxies[0] = g_strdup_printf ("socks5://%s", resolver->socks_authority);
-      proxies[1] = g_strdup_printf ("socks4a://%s", resolver->socks_authority);
-      proxies[2] = g_strdup_printf ("socks4://%s", resolver->socks_authority);
-    }
-  else if (resolver->use_same_proxy && resolver->http_proxy)
-    {
-      proxy = resolver->http_proxy;
-    }
-
-done:
-  if (addr)
-    g_object_unref (addr);
+      else
+       proxies = NULL;
 
-  if (!proxies)
-    {
-      proxies = g_new0 (gchar *, 2);
-      proxies[0] = g_strdup (proxy);
+      g_object_unref (pacrunner);
+      g_free (autoconfig_url);
     }
+
   return proxies;
 }
 
@@ -546,7 +440,7 @@ got_autoconfig_proxies (GObject      *source,
                        GAsyncResult *result,
                        gpointer      user_data)
 {
-  GSimpleAsyncResult *simple = user_data;
+  GTask *task = user_data;
   GVariant *vproxies;
   char **proxies;
   GError *error = NULL;
@@ -556,17 +450,12 @@ got_autoconfig_proxies (GObject      *source,
   if (vproxies)
     {
       g_variant_get (vproxies, "(^as)", &proxies);
-      g_simple_async_result_set_op_res_gpointer (simple, proxies,
-                                                (GDestroyNotify)g_strfreev);
+      g_task_return_pointer (task, proxies, (GDestroyNotify)g_strfreev);
       g_variant_unref (vproxies);
     }
   else
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-    }
-  g_simple_async_result_complete (simple);
-  g_object_unref (simple);
+    g_task_return_error (task, error);
+  g_object_unref (task);
 }
 
 static void
@@ -577,45 +466,40 @@ g_proxy_resolver_gnome_lookup_async (GProxyResolver      *proxy_resolver,
                                     gpointer             user_data)
 {
   GProxyResolverGnome *resolver = G_PROXY_RESOLVER_GNOME (proxy_resolver);
-  GSimpleAsyncResult *simple;
-
-  simple = g_simple_async_result_new (G_OBJECT (resolver),
-                                     callback, user_data,
-                                     g_proxy_resolver_gnome_lookup_async);
-
-  if (resolver->pacrunner)
-    {
-      g_dbus_proxy_call (resolver->pacrunner,
-                        "Lookup",
-                        g_variant_new ("(ss)",
-                                       resolver->autoconfig_url,
-                                       uri),
-                        G_DBUS_CALL_FLAGS_NONE,
-                        -1,
-                        cancellable,
-                        got_autoconfig_proxies,
-                        simple);
-    }
-  else
-    {
-      GError *error = NULL;
-      char **proxies;
+  GTask *task;
+  char **proxies, *autoconfig_url;
+  GDBusProxy *pacrunner;
+  GError *error = NULL;
 
-      proxies = g_proxy_resolver_gnome_lookup (proxy_resolver, uri,
-                                              cancellable, &error);
-      if (proxies)
-       {
-         g_simple_async_result_set_op_res_gpointer (simple, proxies,
-                                                    (GDestroyNotify)g_strfreev);
-       }
-      else
-       {
-         g_simple_async_result_set_from_error (simple, error);
-         g_error_free (error);
-       }
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-    }
+  task = g_task_new (resolver, cancellable, callback, user_data);
+
+   if (!g_proxy_resolver_gnome_lookup_internal (resolver, uri,
+                                               &proxies, &pacrunner, &autoconfig_url,
+                                               cancellable, &error))
+     {
+       g_task_return_error (task, error);
+       g_object_unref (task);
+       return;
+     }
+   else if (proxies)
+     {
+       g_task_return_pointer (task, proxies, (GDestroyNotify)g_strfreev);
+       g_object_unref (task);
+       return;
+     }
+
+   g_dbus_proxy_call (pacrunner,
+                     "Lookup",
+                     g_variant_new ("(ss)",
+                                    autoconfig_url,
+                                    uri),
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     got_autoconfig_proxies,
+                     task);
+   g_object_unref (pacrunner);
+   g_free (autoconfig_url);
 }
 
 static gchar **
@@ -623,18 +507,9 @@ g_proxy_resolver_gnome_lookup_finish (GProxyResolver  *resolver,
                                      GAsyncResult    *result,
                                      GError         **error)
 {
-  GSimpleAsyncResult *simple;
-  gchar **proxies;
+  g_return_val_if_fail (g_task_is_valid (result, resolver), NULL);
 
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (resolver), g_proxy_resolver_gnome_lookup_async), NULL);
-
-  simple = G_SIMPLE_ASYNC_RESULT (result);
-
-  if (g_simple_async_result_propagate_error (simple, error))
-    return NULL;
-
-  proxies = g_simple_async_result_get_op_res_gpointer (simple);
-  return g_strdupv (proxies);
+  return g_task_propagate_pointer (G_TASK (result), error);
 }
 
 static void
@@ -649,6 +524,8 @@ g_proxy_resolver_gnome_class_init (GProxyResolverGnomeClass *resolver_class)
 static void
 g_proxy_resolver_gnome_iface_init (GProxyResolverInterface *iface)
 {
+  g_proxy_resolver_gnome_parent_iface = g_type_interface_peek_parent (iface);
+
   iface->is_supported = g_proxy_resolver_gnome_is_supported;
   iface->lookup = g_proxy_resolver_gnome_lookup;
   iface->lookup_async = g_proxy_resolver_gnome_lookup_async;
index 483ad1f..7d0453e 100644 (file)
@@ -1,6 +1,6 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
-INCLUDES += $(LIBPROXY_CFLAGS)
+AM_CPPFLAGS += $(LIBPROXY_CFLAGS)
 
 giomodule_LTLIBRARIES = libgiolibproxy.la
 
@@ -36,7 +36,7 @@ service_in_files = org.gtk.GLib.PACRunner.service.in
 service_DATA = $(service_in_files:.service.in=.service)
 
 EXTRA_DIST += $(service_in_files)
-CLEANFILES = $(service_DATA)
+CLEANFILES += $(service_DATA)
 
 org.gtk.GLib.PACRunner.service: org.gtk.GLib.PACRunner.service.in Makefile
        $(AM_V_GEN) sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
index 0a141f4..0e2cda5 100644 (file)
@@ -69,7 +69,8 @@ handle_method_call (GDBusConnection       *connection,
 
   g_variant_get (parameters, "(&s&s)", &pac_url, &lookup_url);
 
-  if (!g_ascii_strncasecmp (pac_url, "http", 4))
+  if (!g_ascii_strncasecmp (pac_url, "http", 4) ||
+      !g_ascii_strncasecmp (pac_url, "file:", 5))
     {
       gchar *libproxy_url = g_strdup_printf ("pac+%s", pac_url);
       g_setenv ("http_proxy", libproxy_url, TRUE);
@@ -129,8 +130,6 @@ main (int argc, char *argv[])
 {
   int owner_id;
 
-  g_type_init ();
-
   /* Unset variables that would make libproxy try to use gconf or ksettings */
   g_unsetenv ("GNOME_DESKTOP_SESSION_ID");
   g_unsetenv ("DESKTOP_SESSION");
index 3133ffe..5daee5d 100644 (file)
@@ -128,29 +128,35 @@ free_libproxy_proxies (gchar **proxies)
   free (proxies);
 }
 
-static gchar **
-get_libproxy_proxies (GLibProxyResolver  *resolver,
-                     const gchar        *uri,
-                     GCancellable       *cancellable,
-                     GError            **error)
+static void
+get_libproxy_proxies (GTask        *task,
+                     gpointer      source_object,
+                     gpointer      task_data,
+                     GCancellable *cancellable)
 {
+  GLibProxyResolver *resolver = source_object;
+  const gchar *uri = task_data;
+  GError *error = NULL;
   gchar **proxies;
 
-  /* FIXME: this is not really cancellable; to do it right we'd
-   * need to run this function in a thread pool like GThreadedResolver.
-   */
-
-  if (g_cancellable_set_error_if_cancelled (cancellable, error))
-    return NULL;
+  if (g_task_return_error_if_cancelled (task))
+    return;
 
   proxies = px_proxy_factory_get_proxies (resolver->factory, uri);
-  if (!proxies)
+  if (proxies)
+    {
+      /* We always copy to be able to translate "socks" entry into
+       * three entries ("socks5", "socks4a", "socks4").
+       */
+      g_task_return_pointer (task, copy_proxies (proxies), (GDestroyNotify) g_strfreev);
+      free_libproxy_proxies (proxies);
+    }
+  else
     {
-      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+      g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
                           _("Proxy resolver internal error."));
+      g_task_return_error (task, error);
     }
-
-  return proxies;
 }
 
 static gchar **
@@ -159,72 +165,35 @@ g_libproxy_resolver_lookup (GProxyResolver  *iresolver,
                            GCancellable    *cancellable,
                            GError         **error)
 {
-  GLibProxyResolver *resolver;
+  GLibProxyResolver *resolver = G_LIBPROXY_RESOLVER (iresolver);
+  GTask *task;
   gchar **proxies;
 
-  g_return_val_if_fail (G_IS_LIBPROXY_RESOLVER (iresolver), NULL);
-  g_return_val_if_fail (uri != NULL, NULL);
-
-  resolver = G_LIBPROXY_RESOLVER (iresolver);
+  task = g_task_new (resolver, cancellable, NULL, NULL);
+  g_task_set_task_data (task, g_strdup (uri), g_free);
+  g_task_set_return_on_cancel (task, TRUE);
 
-  proxies = get_libproxy_proxies (resolver, uri, cancellable, error);
-
-  /* We always copy to be able to translate "socks" entry into
-   * three entries ("socks5", "socks4a", "socks4").
-   */
-  if (proxies)
-    {
-      gchar **copy;
-
-      copy = copy_proxies (proxies);
-      free_libproxy_proxies (proxies);
-      proxies = copy;
-    }
+  g_task_run_in_thread_sync (task, get_libproxy_proxies);
+  proxies = g_task_propagate_pointer (task, error);
+  g_object_unref (task);
 
   return proxies;
 }
 
 static void
-_lookup_async (GSimpleAsyncResult *simple,
-              GObject *object,
-              GCancellable *cancellable)
-{
-  GLibProxyResolver *resolver = G_LIBPROXY_RESOLVER (object);
-  GError *error = NULL;
-  gchar **proxies = NULL;
-  gchar *uri;
-
-  uri = g_simple_async_result_get_op_res_gpointer (simple);
-
-  proxies = get_libproxy_proxies (resolver, uri, cancellable, &error);
-
-  if (error)
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-    }
-  else
-    g_simple_async_result_set_op_res_gpointer (simple, proxies, (GDestroyNotify)free_libproxy_proxies);
-}
-
-static void
 g_libproxy_resolver_lookup_async (GProxyResolver      *resolver,
                                  const gchar         *uri,
                                  GCancellable        *cancellable,
                                  GAsyncReadyCallback  callback,
                                  gpointer             user_data)
 {
-  GSimpleAsyncResult *simple;
-
-  simple = g_simple_async_result_new (G_OBJECT (resolver),
-                                     callback, user_data,
-                                     g_libproxy_resolver_lookup_async);
-  g_simple_async_result_set_op_res_gpointer (simple,
-                                            g_strdup (uri),
-                                            (GDestroyNotify) g_free);
-  g_simple_async_result_run_in_thread (simple, _lookup_async,
-                                      G_PRIORITY_DEFAULT, cancellable);
-  g_object_unref (simple);
+  GTask *task;
+
+  task = g_task_new (resolver, cancellable, callback, user_data);
+  g_task_set_task_data (task, g_strdup (uri), g_free);
+  g_task_set_return_on_cancel (task, TRUE);
+  g_task_run_in_thread (task, get_libproxy_proxies);
+  g_object_unref (task);
 }
 
 static gchar **
@@ -232,18 +201,9 @@ g_libproxy_resolver_lookup_finish (GProxyResolver     *resolver,
                                   GAsyncResult       *result,
                                   GError            **error)
 {
-  GSimpleAsyncResult *simple;
-  gchar **proxies;
-
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (resolver), g_libproxy_resolver_lookup_async), NULL);
-
-  simple = G_SIMPLE_ASYNC_RESULT (result);
-
-  if (g_simple_async_result_propagate_error (simple, error))
-    return NULL;
+  g_return_val_if_fail (g_task_is_valid (result, resolver), NULL);
 
-  proxies = g_simple_async_result_get_op_res_gpointer (simple);
-  return copy_proxies (proxies);
+  return g_task_propagate_pointer (G_TASK (result), error);
 }
 
 static void
index ec4732c..8155bce 100644 (file)
@@ -1,16 +1,22 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
-INCLUDES +=                                    \
+AM_CPPFLAGS +=                                 \
        $(GSETTINGS_DESKTOP_SCHEMAS_CFLAGS)     \
        -I$(top_srcdir)/proxy                   \
        -DSRCDIR=\""$(srcdir)"\"                \
        -DTOP_BUILDDIR=\""$(top_builddir)"\"
 
-noinst_PROGRAMS = $(TEST_PROGS)
-
 LDADD  = \
        $(GLIB_LIBS)
 
+test_programs =
+
 if HAVE_GNOME_PROXY
-TEST_PROGS += gnome
+test_programs += gnome
 endif
+
+if HAVE_LIBPROXY
+test_programs += libproxy
+endif
+
+EXTRA_DIST += common.c
diff --git a/proxy/tests/common.c b/proxy/tests/common.c
new file mode 100644 (file)
index 0000000..23ebb20
--- /dev/null
@@ -0,0 +1,192 @@
+/* GProxyResolver tests
+ *
+ * Copyright 2011-2013 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <gio/gio.h>
+
+static void
+test_proxy_uri_common (void)
+{
+  GProxyResolver *resolver;
+  gchar **proxies;
+  GError *error = NULL;
+
+  resolver = g_proxy_resolver_get_default ();
+
+  proxies = g_proxy_resolver_lookup (resolver, "http://one.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "http://proxy.example.com:8080");
+  g_strfreev (proxies);
+
+  proxies = g_proxy_resolver_lookup (resolver, "HTTPS://uppercase.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "http://proxy-s.example.com:7070");
+  g_strfreev (proxies);
+
+  /* Unknown protocols will use the http proxy by default in this configuration. */
+  proxies = g_proxy_resolver_lookup (resolver, "htt://missing-letter.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "http://proxy.example.com:8080");
+  g_strfreev (proxies);
+
+  proxies = g_proxy_resolver_lookup (resolver, "ftps://extra-letter.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "http://proxy.example.com:8080");
+  g_strfreev (proxies);
+
+  proxies = g_proxy_resolver_lookup (resolver, "ftp://five.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "ftp://proxy-f.example.com:6060");
+  g_strfreev (proxies);
+}
+
+static void
+test_proxy_socks_common (void)
+{
+  GProxyResolver *resolver;
+  gchar **proxies;
+  GError *error = NULL;
+
+  resolver = g_proxy_resolver_get_default ();
+
+  proxies = g_proxy_resolver_lookup (resolver, "http://one.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 3);
+  g_assert_cmpstr (proxies[0], ==, "socks5://proxy.example.com:1234");
+  g_assert_cmpstr (proxies[1], ==, "socks4a://proxy.example.com:1234");
+  g_assert_cmpstr (proxies[2], ==, "socks4://proxy.example.com:1234");
+  g_strfreev (proxies);
+
+  proxies = g_proxy_resolver_lookup (resolver, "wednesday://two.example.com/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 3);
+  g_assert_cmpstr (proxies[0], ==, "socks5://proxy.example.com:1234");
+  g_assert_cmpstr (proxies[1], ==, "socks4a://proxy.example.com:1234");
+  g_assert_cmpstr (proxies[2], ==, "socks4://proxy.example.com:1234");
+  g_strfreev (proxies);
+
+  proxies = g_proxy_resolver_lookup (resolver, "http://127.0.0.1/",
+                                     NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (g_strv_length (proxies), ==, 1);
+  g_assert_cmpstr (proxies[0], ==, "direct://");
+  g_strfreev (proxies);
+}
+
+static const char *ignore_hosts[] = {
+  ".bbb.xx",
+  "*.ccc.xx",
+  "ddd.xx",
+  "*.eee.xx:8000",
+  "127.0.0.0/24",
+  "10.0.0.1:8000",
+  "::1",
+  "fe80::/10",
+  NULL
+};
+static const int n_ignore_hosts = G_N_ELEMENTS (ignore_hosts) - 1;
+
+static const struct {
+  const char *uri;
+  const char *proxy;
+  gboolean libproxy_fails;
+} ignore_tests[] = {
+  { "http://aaa.xx/",                   "http://localhost:8080" },
+  { "http://aaa.xx:8000/",              "http://localhost:8080" },
+  { "http://www.aaa.xx/",               "http://localhost:8080" },
+  { "http://www.aaa.xx:8000/",          "http://localhost:8080" },
+  { "https://aaa.xx/",                  "http://localhost:8080" },
+  { "http://bbb.xx/",                   "direct://", TRUE },
+  { "http://www.bbb.xx/",               "direct://" },
+  { "http://bbb.xx:8000/",              "direct://", TRUE },
+  { "http://www.bbb.xx:8000/",          "direct://" },
+  { "https://bbb.xx/",                  "direct://", TRUE },
+  { "http://nobbb.xx/",          "http://localhost:8080" },
+  { "http://www.nobbb.xx/",      "http://localhost:8080" },
+  { "http://nobbb.xx:8000/",     "http://localhost:8080" },
+  { "http://www.nobbb.xx:8000/", "http://localhost:8080" },
+  { "https://nobbb.xx/",         "http://localhost:8080" },
+  { "http://ccc.xx/",                   "direct://", TRUE },
+  { "http://www.ccc.xx/",               "direct://" },
+  { "http://ccc.xx:8000/",              "direct://", TRUE },
+  { "http://www.ccc.xx:8000/",          "direct://" },
+  { "https://ccc.xx/",                  "direct://", TRUE },
+  { "http://ddd.xx/",                   "direct://" },
+  { "http://ddd.xx:8000/",              "direct://" },
+  { "http://www.ddd.xx/",               "direct://", TRUE },
+  { "http://www.ddd.xx:8000/",          "direct://", TRUE },
+  { "https://ddd.xx/",                  "direct://" },
+  { "http://eee.xx/",                   "http://localhost:8080", TRUE },
+  { "http://eee.xx:8000/",              "direct://", TRUE },
+  { "http://www.eee.xx/",               "http://localhost:8080" },
+  { "http://www.eee.xx:8000/",          "direct://" },
+  { "https://eee.xx/",                  "http://localhost:8080", TRUE },
+  { "http://1.2.3.4/",                  "http://localhost:8080" },
+  { "http://127.0.0.1/",                "direct://" },
+  { "http://127.0.0.2/",                "direct://" },
+  { "http://127.0.0.255/",              "direct://" },
+  { "http://127.0.1.0/",                "http://localhost:8080" },
+  { "http://10.0.0.1/",                 "http://localhost:8080" },
+  { "http://10.0.0.1:8000/",            "direct://" },
+  { "http://[::1]/",                    "direct://", TRUE },
+  { "http://[::1]:80/",                 "direct://", TRUE },
+  { "http://[::1:1]/",                  "http://localhost:8080" },
+  { "http://[::1:1]:80/",               "http://localhost:8080" },
+  { "http://[fe80::1]/",                "direct://", TRUE },
+  { "http://[fe80::1]:80/",             "direct://", TRUE },
+  { "http://[fec0::1]/",                "http://localhost:8080" },
+  { "http://[fec0::1]:80/",             "http://localhost:8080" }
+};
+static const int n_ignore_tests = G_N_ELEMENTS (ignore_tests);
+
+static void
+test_proxy_ignore_common (gboolean is_libproxy)
+{
+  GProxyResolver *resolver;
+  GError *error = NULL;
+  char **proxies;
+  int i;
+
+  resolver = g_proxy_resolver_get_default ();
+
+  for (i = 0; i < n_ignore_tests; i++)
+    {
+      proxies = g_proxy_resolver_lookup (resolver, ignore_tests[i].uri,
+                                        NULL, &error);
+      g_assert_no_error (error);
+
+      if (is_libproxy && ignore_tests[i].libproxy_fails)
+       g_assert_cmpstr (proxies[0], ==, "http://localhost:8080");
+      else
+       g_assert_cmpstr (proxies[0], ==, ignore_tests[i].proxy);
+
+      g_strfreev (proxies);
+    }
+}
index 7c7b9b1..578ac49 100644 (file)
@@ -20,6 +20,8 @@
 #include <gio/gio.h>
 #include <gdesktop-enums.h>
 
+#include "common.c"
+
 #define GNOME_PROXY_SETTINGS_SCHEMA       "org.gnome.system.proxy"
 #define GNOME_PROXY_MODE_KEY              "mode"
 #define GNOME_PROXY_AUTOCONFIG_URL_KEY    "autoconfig-url"
 #define GNOME_PROXY_SOCKS_HOST_KEY        "host"
 #define GNOME_PROXY_SOCKS_PORT_KEY        "port"
 
-static const char *ignore_hosts[] = {
-  ".bbb.xx",
-  "*.ccc.xx",
-  "ddd.xx",
-  "*.eee.xx:8000",
-  "127.0.0.0/24",
-  "10.0.0.1:8000",
-  "::1",
-  "fe80::/10"
-};
-static const int n_ignore_hosts = G_N_ELEMENTS (ignore_hosts);
-
-static const struct {
-  const char *uri;
-  const char *proxy;
-} ignore_tests[] = {
-  { "http://aaa.xx/",                   "http://localhost:8080" },
-  { "http://aaa.xx:8000/",              "http://localhost:8080" },
-  { "http://www.aaa.xx/",               "http://localhost:8080" },
-  { "http://www.aaa.xx:8000/",          "http://localhost:8080" },
-  { "https://aaa.xx/",                  "http://localhost:8080" },
-  { "http://bbb.xx/",                   "direct://" },
-  { "http://www.bbb.xx/",               "direct://" },
-  { "http://bbb.xx:8000/",              "direct://" },
-  { "http://www.bbb.xx:8000/",          "direct://" },
-  { "https://bbb.xx/",                  "direct://" },
-  { "http://nobbb.xx/",          "http://localhost:8080" },
-  { "http://www.nobbb.xx/",      "http://localhost:8080" },
-  { "http://nobbb.xx:8000/",     "http://localhost:8080" },
-  { "http://www.nobbb.xx:8000/", "http://localhost:8080" },
-  { "https://nobbb.xx/",         "http://localhost:8080" },
-  { "http://ccc.xx/",                   "direct://" },
-  { "http://www.ccc.xx/",               "direct://" },
-  { "http://ccc.xx:8000/",              "direct://" },
-  { "http://www.ccc.xx:8000/",          "direct://" },
-  { "https://ccc.xx/",                  "direct://" },
-  { "http://ddd.xx/",                   "direct://" },
-  { "http://ddd.xx:8000/",              "direct://" },
-  { "http://www.ddd.xx/",               "direct://" },
-  { "http://www.ddd.xx:8000/",          "direct://" },
-  { "https://ddd.xx/",                  "direct://" },
-  { "http://eee.xx/",                   "http://localhost:8080" },
-  { "http://eee.xx:8000/",              "direct://" },
-  { "http://www.eee.xx/",               "http://localhost:8080" },
-  { "http://www.eee.xx:8000/",          "direct://" },
-  { "https://eee.xx/",                  "http://localhost:8080" },
-  { "http://1.2.3.4/",                  "http://localhost:8080" },
-  { "http://127.0.0.1/",                "direct://" },
-  { "http://127.0.0.2/",                "direct://" },
-  { "http://127.0.0.255/",              "direct://" },
-  { "http://127.0.1.0/",                "http://localhost:8080" },
-  { "http://10.0.0.1/",                 "http://localhost:8080" },
-  { "http://10.0.0.1:8000/",            "direct://" },
-  { "http://[::1]/",                    "direct://" },
-  { "http://[::1]:80/",                 "direct://" },
-  { "http://[::1:1]/",                  "http://localhost:8080" },
-  { "http://[::1:1]:80/",               "http://localhost:8080" },
-  { "http://[fe80::1]/",                "direct://" },
-  { "http://[fe80::1]:80/",             "direct://" },
-  { "http://[fec0::1]/",                "http://localhost:8080" },
-  { "http://[fec0::1]:80/",             "http://localhost:8080" }
-};
-static const int n_ignore_tests = G_N_ELEMENTS (ignore_tests);
+static void
+reset_proxy_settings (gpointer      fixture,
+                     gconstpointer user_data)
+{
+  GSettings *settings, *child;
+
+  settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
+  g_settings_reset (settings, GNOME_PROXY_MODE_KEY);
+  g_settings_reset (settings, GNOME_PROXY_USE_SAME_PROXY_KEY);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA);
+  g_settings_reset (child, GNOME_PROXY_HTTP_HOST_KEY);
+  g_settings_reset (child, GNOME_PROXY_HTTP_PORT_KEY);
+  g_object_unref (child);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA);
+  g_settings_reset (child, GNOME_PROXY_HTTPS_HOST_KEY);
+  g_settings_reset (child, GNOME_PROXY_HTTPS_PORT_KEY);
+  g_object_unref (child);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA);
+  g_settings_reset (child, GNOME_PROXY_FTP_HOST_KEY);
+  g_settings_reset (child, GNOME_PROXY_FTP_PORT_KEY);
+  g_object_unref (child);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA);
+  g_settings_reset (child, GNOME_PROXY_SOCKS_HOST_KEY);
+  g_settings_reset (child, GNOME_PROXY_SOCKS_PORT_KEY);
+  g_object_unref (child);
+
+  g_object_unref (settings);
+}
+
+static void
+test_proxy_uri (gpointer      fixture,
+               gconstpointer user_data)
+{
+  GSettings *settings, *child;
+
+  settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
+  g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
+  g_settings_set_boolean (settings, GNOME_PROXY_USE_SAME_PROXY_KEY, TRUE);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA);
+  g_settings_set_string (child, GNOME_PROXY_HTTP_HOST_KEY, "proxy.example.com");
+  g_settings_set_int (child, GNOME_PROXY_HTTP_PORT_KEY, 8080);
+  g_object_unref (child);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA);
+  g_settings_set_string (child, GNOME_PROXY_HTTPS_HOST_KEY, "proxy-s.example.com");
+  g_settings_set_int (child, GNOME_PROXY_HTTPS_PORT_KEY, 7070);
+  g_object_unref (child);
+
+  child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA);
+  g_settings_set_string (child, GNOME_PROXY_FTP_HOST_KEY, "proxy-f.example.com");
+  g_settings_set_int (child, GNOME_PROXY_FTP_PORT_KEY, 6060);
+  g_object_unref (child);
+
+  g_object_unref (settings);
+
+  test_proxy_uri_common ();
+}
 
 static void
-test_proxy_ignore (void)
+test_proxy_socks (gpointer      fixture,
+                 gconstpointer user_data)
+{
+  GSettings *settings, *child;
+  const gchar *ignore_hosts[2] = { "127.0.0.1", NULL };
+
+  settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
+  g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
+  g_settings_set (settings, GNOME_PROXY_IGNORE_HOSTS_KEY,
+                 "@as", g_variant_new_strv (ignore_hosts, -1));
+
+  child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA);
+  g_settings_set_string (child, GNOME_PROXY_SOCKS_HOST_KEY, "proxy.example.com");
+  g_settings_set_int (child, GNOME_PROXY_SOCKS_PORT_KEY, 1234);
+  g_object_unref (child);
+  g_object_unref (settings);
+
+  test_proxy_socks_common ();
+}
+
+static void
+test_proxy_ignore (gpointer      fixture,
+                  gconstpointer user_data)
 {
   GSettings *settings, *http;
-  GProxyResolver *resolver;
-  GError *error = NULL;
-  char **proxies;
-  int i;
 
   settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
   g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
@@ -127,31 +146,29 @@ test_proxy_ignore (void)
   g_settings_set_string (http, GNOME_PROXY_HTTP_HOST_KEY, "localhost");
   g_settings_set_int (http, GNOME_PROXY_HTTP_PORT_KEY, 8080);
 
-  resolver = g_proxy_resolver_get_default ();
-
-  for (i = 0; i < n_ignore_tests; i++)
-    {
-      proxies = g_proxy_resolver_lookup (resolver, ignore_tests[i].uri,
-                                        NULL, &error);
-      g_assert_no_error (error);
+  g_object_unref (http);
+  g_object_unref (settings);
 
-      g_assert_cmpstr (proxies[0], ==, ignore_tests[i].proxy);
-      g_strfreev (proxies);
-    }
+  test_proxy_ignore_common (FALSE);
 }
 
 int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/proxy/gnome/.libs", TRUE);
   g_setenv ("GIO_USE_PROXY_RESOLVER", "gnome", TRUE);
   g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
-
-  g_test_add_func ("/proxy/gnome/ignore", test_proxy_ignore);
+  g_setenv ("DESKTOP_SESSION", "gnome", TRUE);
+
+  g_test_add_vtable ("/proxy/gnome/uri", 0, NULL,
+                    reset_proxy_settings, test_proxy_uri, NULL);
+  g_test_add_vtable ("/proxy/gnome/socks", 0, NULL,
+                    reset_proxy_settings, test_proxy_socks, NULL);
+  g_test_add_vtable ("/proxy/gnome/ignore", 0, NULL,
+                    reset_proxy_settings, test_proxy_ignore, NULL);
 
   return g_test_run();
 }
diff --git a/proxy/tests/libproxy.c b/proxy/tests/libproxy.c
new file mode 100644 (file)
index 0000000..f46c27c
--- /dev/null
@@ -0,0 +1,94 @@
+/* GLibProxyResolver tests
+ *
+ * Copyright 2011-2013 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <gio/gio.h>
+
+#include "common.c"
+
+static void
+reset_proxy_settings (gpointer      fixture,
+                     gconstpointer user_data)
+{
+  g_unsetenv ("http_proxy");
+  g_unsetenv ("HTTP_PROXY");
+  g_unsetenv ("https_proxy");
+  g_unsetenv ("HTTPS_PROXY");
+  g_unsetenv ("ftp_proxy");
+  g_unsetenv ("FTP_PROXY");
+  g_unsetenv ("no_proxy");
+  g_unsetenv ("NO_PROXY");
+}
+
+static void
+test_proxy_uri (gpointer      fixture,
+               gconstpointer user_data)
+{
+  g_setenv ("http_proxy", "http://proxy.example.com:8080", TRUE);
+  g_setenv ("https_proxy", "http://proxy-s.example.com:7070", TRUE);
+  g_setenv ("ftp_proxy", "ftp://proxy-f.example.com:6060", TRUE);
+
+  test_proxy_uri_common ();
+}
+
+static void
+test_proxy_socks (gpointer      fixture,
+                 gconstpointer user_data)
+{
+  g_setenv ("http_proxy", "socks://proxy.example.com:1234", TRUE);
+  g_setenv ("no_proxy", "127.0.0.1", TRUE);
+
+  test_proxy_socks_common ();
+}
+
+static void
+test_proxy_ignore (gpointer      fixture,
+                  gconstpointer user_data)
+{
+  gchar *no_proxy = g_strjoinv (",", (gchar **) ignore_hosts);
+
+  g_setenv ("http_proxy", "http://localhost:8080", TRUE);
+  g_setenv ("no_proxy", no_proxy, TRUE);
+  g_free (no_proxy);
+
+  test_proxy_ignore_common (TRUE);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  /* Unset variables that would make libproxy try to use gconf or ksettings */
+  g_unsetenv ("GNOME_DESKTOP_SESSION_ID");
+  g_unsetenv ("DESKTOP_SESSION");
+  g_unsetenv ("KDE_FULL_SESSION");
+
+  /* Use the just-built libproxy module */
+  g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/proxy/libproxy/.libs", TRUE);
+
+  g_test_add_vtable ("/proxy/libproxy/uri", 0, NULL,
+                    reset_proxy_settings, test_proxy_uri, NULL);
+  g_test_add_vtable ("/proxy/libproxy/socks", 0, NULL,
+                    reset_proxy_settings, test_proxy_socks, NULL);
+  g_test_add_vtable ("/proxy/libproxy/ignore", 0, NULL,
+                    reset_proxy_settings, test_proxy_ignore, NULL);
+
+  return g_test_run();
+}
index fd83f4f..2fb482f 100644 (file)
@@ -1,4 +1,4 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
 giomodule_LTLIBRARIES = libgiognutls.la
 
@@ -47,9 +47,9 @@ libgiognutls_la_SOURCES =             \
        $(P11_SRCS)                     \
        $(NULL)
 
-INCLUDES +=                            \
+AM_CPPFLAGS +=                         \
        $(P11_CFLAGS)                   \
-       $(LIBGNUTLS_CFLAGS)             \
+       $(GNUTLS_CFLAGS)                \
        $(NULL)
 
 libgiognutls_la_LDFLAGS = $(module_flags)
old mode 100644 (file)
new mode 100755 (executable)
index 0cd3cc8..6c6b094
@@ -7,4 +7,20 @@
 
 #define ENABLE_TIZEN_NPN 1
 
+#if ENABLE(TIZEN_TV_DLOG)
+
+#ifndef LOG_TAG
+#define LOG_TAG "glib-networking" /* This LOG_TAG should be defined before including dlog.h. Because dlog.h is using it. */
+#endif
+
+#include <dlog/dlog.h>
+
+#define TIZEN_LOGD(fmt, args...) LOGD("[%s: %s: %d] "fmt, (rindex(__FILE__, '/') ? rindex(__FILE__, '/') + 1 : __FILE__), __FUNCTION__, __LINE__, ##args)
+#define TIZEN_LOGI(fmt, args...) LOGI("[%s: %s: %d] "fmt, (rindex(__FILE__, '/') ? rindex(__FILE__, '/') + 1 : __FILE__), __FUNCTION__, __LINE__, ##args)
+#define TIZEN_LOGW(fmt, args...) LOGW("[%s: %s: %d] "fmt, (rindex(__FILE__, '/') ? rindex(__FILE__, '/') + 1 : __FILE__), __FUNCTION__, __LINE__, ##args)
+#define TIZEN_LOGE(fmt, args...) LOGE("[%s: %s: %d] "fmt, (rindex(__FILE__, '/') ? rindex(__FILE__, '/') + 1 : __FILE__), __FUNCTION__, __LINE__, ##args)
+#define TIZEN_LOGE_IF(cond, fmt, args...) LOGE_IF(cond, "[%s: %s: %d] "fmt, (rindex(__FILE__, '/') ? rindex(__FILE__, '/') + 1 : __FILE__), __FUNCTION__, __LINE__, ##args)
+
+#endif
+
 #endif
index 493a044..55ec1a5 100644 (file)
@@ -212,7 +212,7 @@ cache_data_free (gpointer data)
 }
 
 static GHashTable *
-get_session_cache (gnutls_connection_end_t type,
+get_session_cache (unsigned int            type,
                   gboolean                create)
 {
   GHashTable **cache_p;
@@ -227,7 +227,7 @@ get_session_cache (gnutls_connection_end_t type,
 }
 
 void
-g_tls_backend_gnutls_store_session (gnutls_connection_end_t  type,
+g_tls_backend_gnutls_store_session (unsigned int             type,
                                    GBytes                  *session_id,
                                    GBytes                  *session_data)
 {
@@ -263,7 +263,7 @@ g_tls_backend_gnutls_store_session (gnutls_connection_end_t  type,
 }
 
 void
-g_tls_backend_gnutls_remove_session (gnutls_connection_end_t  type,
+g_tls_backend_gnutls_remove_session (unsigned int             type,
                                     GBytes                  *session_id)
 {
   GHashTable *cache;
@@ -278,7 +278,7 @@ g_tls_backend_gnutls_remove_session (gnutls_connection_end_t  type,
 }
 
 GBytes *
-g_tls_backend_gnutls_lookup_session (gnutls_connection_end_t  type,
+g_tls_backend_gnutls_lookup_session (unsigned int             type,
                                     GBytes                  *session_id)
 {
   GTlsBackendGnutlsCacheData *cache_data;
index ceb686a..22caa00 100644 (file)
@@ -46,12 +46,12 @@ struct _GTlsBackendGnutls
 GType g_tls_backend_gnutls_get_type (void) G_GNUC_CONST;
 void  g_tls_backend_gnutls_register (GIOModule *module);
 
-void    g_tls_backend_gnutls_store_session  (gnutls_connection_end_t  type,
+void    g_tls_backend_gnutls_store_session  (unsigned int             type,
                                             GBytes                  *session_id,
                                             GBytes                  *session_data);
-void    g_tls_backend_gnutls_remove_session (gnutls_connection_end_t  type,
+void    g_tls_backend_gnutls_remove_session (unsigned int             type,
                                             GBytes                  *session_id);
-GBytes *g_tls_backend_gnutls_lookup_session (gnutls_connection_end_t  type,
+GBytes *g_tls_backend_gnutls_lookup_session (unsigned int             type,
                                             GBytes                  *session_id);
 
 G_END_DECLS
old mode 100644 (file)
new mode 100755 (executable)
index 30497e6..6a99d5b
@@ -25,6 +25,7 @@
 
 #include "gtlscertificate-gnutls.h"
 #include <glib/gi18n-lib.h>
+#include "TIZEN.h"
 
 static void     g_tls_certificate_gnutls_initable_iface_init (GInitableIface  *iface);
 
@@ -310,6 +311,10 @@ g_tls_certificate_gnutls_verify (GTlsCertificate     *cert,
   gnutls_x509_crt_t *chain;
   GTlsCertificateFlags gtls_flags;
   time_t t, now;
+#if ENABLE(TIZEN_TV_DLOG)
+  char timebuf[256];
+#endif
+
   
   cert_gnutls = G_TLS_CERTIFICATE_GNUTLS (cert);
   for (num_certs = 0; cert_gnutls; cert_gnutls = cert_gnutls->priv->issuer)
@@ -349,10 +354,32 @@ g_tls_certificate_gnutls_verify (GTlsCertificate     *cert,
   for (i = 0; i < num_certs; i++)
     {
       t = gnutls_x509_crt_get_activation_time (chain[i]);
+
+#if ENABLE(TIZEN_TV_DLOG)
+      ctime_r(&now, timebuf);
+      TIZEN_LOGI("[Certificate] TV borad time is: %s", timebuf);
+      if (t != (time_t) -1) {
+       ctime_r(&t, timebuf);
+        TIZEN_LOGI("[Certificate] CA activation time is: %s", timebuf);
+      }
+      else
+        TIZEN_LOGI("[Certificate] gnutls_x509_crt_get_activation_time ERROR");
+#endif
+
       if (t == (time_t) -1 || t > now)
        gtls_flags |= G_TLS_CERTIFICATE_NOT_ACTIVATED;
 
       t = gnutls_x509_crt_get_expiration_time (chain[i]);
+
+#if ENABLE(TIZEN_TV_DLOG)
+      if (t != (time_t) -1) {
+       ctime_r(&t, timebuf);
+        TIZEN_LOGI("[Certificate] CA expiration time is: %s", timebuf);
+      }
+      else
+        TIZEN_LOGI("[Certificate] gnutls_x509_crt_get_expiration_time ERROR");
+#endif
+
       if (t == (time_t) -1 || t < now)
        gtls_flags |= G_TLS_CERTIFICATE_EXPIRED;
     }
@@ -371,7 +398,7 @@ g_tls_certificate_gnutls_real_copy (GTlsCertificateGnutls    *gnutls,
                                     gnutls_retr2_st          *st)
 {
   gnutls_x509_crt_t cert;
-  gnutls_datum data;
+  gnutls_datum_t data;
   size_t size = 0;
 
   gnutls_x509_crt_export (gnutls->priv->cert, GNUTLS_X509_FMT_DER,
@@ -429,8 +456,8 @@ g_tls_certificate_gnutls_initable_iface_init (GInitableIface  *iface)
 }
 
 GTlsCertificate *
-g_tls_certificate_gnutls_new (const gnutls_datum *datum,
-                             GTlsCertificate    *issuer)
+g_tls_certificate_gnutls_new (const gnutls_datum_t *datum,
+                             GTlsCertificate      *issuer)
 {
   GTlsCertificateGnutls *gnutls;
 
@@ -444,7 +471,7 @@ g_tls_certificate_gnutls_new (const gnutls_datum *datum,
 
 void
 g_tls_certificate_gnutls_set_data (GTlsCertificateGnutls *gnutls,
-                                   const gnutls_datum *datum)
+                                   const gnutls_datum_t  *datum)
 {
   g_return_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (gnutls));
   g_return_if_fail (!gnutls->priv->have_cert);
@@ -541,6 +568,9 @@ g_tls_certificate_gnutls_verify_identity (GTlsCertificateGnutls *gnutls,
   /* FIXME: check sRVName and uniformResourceIdentifier
    * subjectAltNames, if appropriate for @identity.
    */
+#if ENABLE(TIZEN_TV_DLOG)
+  TIZEN_LOGI("[Network] SSL HandShake - Bad Identity");
+#endif
 
   return G_TLS_CERTIFICATE_BAD_IDENTITY;
 }
@@ -559,3 +589,14 @@ g_tls_certificate_gnutls_set_issuer (GTlsCertificateGnutls *gnutls,
   gnutls->priv->issuer = issuer;
   g_object_notify (G_OBJECT (gnutls), "issuer");
 }
+
+GBytes *
+g_tls_certificate_gnutls_get_bytes (GTlsCertificateGnutls *gnutls)
+{
+  GByteArray *array;
+
+  g_return_val_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (gnutls), NULL);
+
+  g_object_get (gnutls, "certificate", &array, NULL);
+  return g_byte_array_free_to_bytes (array);
+}
index 981d4a7..94fddeb 100644 (file)
@@ -46,11 +46,13 @@ struct _GTlsCertificateGnutls
 
 GType g_tls_certificate_gnutls_get_type (void) G_GNUC_CONST;
 
-GTlsCertificate *            g_tls_certificate_gnutls_new             (const gnutls_datum    *datum,
+GTlsCertificate *            g_tls_certificate_gnutls_new             (const gnutls_datum_t  *datum,
                                                                        GTlsCertificate       *issuer);
 
+GBytes *                     g_tls_certificate_gnutls_get_bytes       (GTlsCertificateGnutls *gnutls);
+
 void                         g_tls_certificate_gnutls_set_data        (GTlsCertificateGnutls *gnutls,
-                                                                       const gnutls_datum *datum);
+                                                                       const gnutls_datum_t  *datum);
 
 const gnutls_x509_crt_t      g_tls_certificate_gnutls_get_cert        (GTlsCertificateGnutls *gnutls);
 gboolean                     g_tls_certificate_gnutls_has_key         (GTlsCertificateGnutls *gnutls);
index fe6c6e1..07a3a00 100644 (file)
@@ -29,7 +29,6 @@
 #include "gtlsbackend-gnutls.h"
 #include "gtlscertificate-gnutls.h"
 #include <glib/gi18n-lib.h>
-#include <TIZEN.h>
 
 enum
 {
@@ -277,11 +276,7 @@ g_tls_client_connection_gnutls_begin_handshake (GTlsConnectionGnutls *conn)
   GTlsClientConnectionGnutls *gnutls = G_TLS_CLIENT_CONNECTION_GNUTLS (conn);
 
   /* Try to get a cached session */
-#if ENABLE(TIZEN_NPN)
-  if (gnutls->priv->session_id && !g_tls_connection_gnutls_is_npn_set (conn))
-#else
   if (gnutls->priv->session_id)
-#endif
     {
       GBytes *session_data;
 
@@ -298,85 +293,15 @@ g_tls_client_connection_gnutls_begin_handshake (GTlsConnectionGnutls *conn)
   gnutls->priv->cert_requested = FALSE;
 }
 
-static gboolean
-g_tls_client_connection_gnutls_verify_peer (GTlsConnectionGnutls  *conn_gnutls,
-                                           GTlsCertificate       *peer_certificate,
-                                           GTlsCertificateFlags  *errors)
-{
-  GTlsClientConnectionGnutls *gnutls = G_TLS_CLIENT_CONNECTION_GNUTLS (conn_gnutls);
-  GTlsDatabase *database;
-  gboolean accepted;
-  GError *error = NULL;
-
-  database = g_tls_connection_get_database (G_TLS_CONNECTION (conn_gnutls));
-  if (database == NULL)
-    {
-      *errors |= G_TLS_CERTIFICATE_UNKNOWN_CA;
-      *errors |= g_tls_certificate_verify (peer_certificate, gnutls->priv->server_identity, NULL);
-    }
-  else
-    {
-      *errors |= g_tls_database_verify_chain (database, peer_certificate,
-                                              G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                              gnutls->priv->server_identity,
-                                              g_tls_connection_get_interaction (G_TLS_CONNECTION (gnutls)),
-                                              G_TLS_DATABASE_VERIFY_NONE,
-                                              NULL, &error);
-      if (error)
-        {
-          g_warning ("failure verifying certificate chain: %s",
-                     error->message);
-          g_clear_error (&error);
-        }
-    }
-
-  if (*errors & gnutls->priv->validation_flags)
-    accepted = g_tls_connection_emit_accept_certificate (G_TLS_CONNECTION (gnutls), peer_certificate, *errors);
-  else
-    accepted = TRUE;
-
-  return accepted;
-}
-
-#if ENABLE(TIZEN_NPN)
-/* Following two functions MUST be declared.
- * Because glib2.0 already has following functions named set_next_protocols/get_next_protocol. */
-/*
-  available protocols as it is on Dec. 2012:
-    http/1.1
-    spdy/2
-    spdy/3
-*/
-#define __PROTOCOL_NAME_MAXLEN    8       /* http/1.1 */
-
-static gboolean
-_is_spdy (GTlsConnectionGnutls  *conn)
-{
-  int gnutls_ret;
-  size_t size;
-  gchar buf[__PROTOCOL_NAME_MAXLEN];
-
-  size = __PROTOCOL_NAME_MAXLEN;
-  gnutls_ret = gnutls_get_next_protocol (g_tls_connection_gnutls_get_session (conn), buf, &size, NULL);
-  if (!gnutls_ret)
-  {
-         if (!strncmp (buf, "spdy", 4))
-                 return TRUE;
-  }
-
-  return FALSE;
-}
-#endif
-
 static void
 g_tls_client_connection_gnutls_finish_handshake (GTlsConnectionGnutls  *conn,
-                                                gboolean               success,
                                                 GError               **inout_error)
 {
   GTlsClientConnectionGnutls *gnutls = G_TLS_CLIENT_CONNECTION_GNUTLS (conn);
 
-  if (inout_error &&
-      g_error_matches (*inout_error, G_TLS_ERROR, G_TLS_ERROR_NOT_TLS) &&
+  g_assert (inout_error != NULL);
+
+  if (g_error_matches (*inout_error, G_TLS_ERROR, G_TLS_ERROR_NOT_TLS) &&
       gnutls->priv->cert_requested)
     {
       g_clear_error (inout_error);
@@ -384,15 +309,11 @@ g_tls_client_connection_gnutls_finish_handshake (GTlsConnectionGnutls  *conn,
                           _("Server required TLS certificate"));
     }
 
-#if ENABLE(TIZEN_NPN)
-  if (gnutls->priv->session_id && !_is_spdy (conn))
-#else
   if (gnutls->priv->session_id)
-#endif
     {
-      gnutls_datum session_datum;
+      gnutls_datum_t session_datum;
 
-      if (success &&
+      if (!*inout_error &&
          gnutls_session_get_data2 (g_tls_connection_gnutls_get_session (conn),
                                    &session_datum) == 0)
        {
@@ -423,7 +344,6 @@ g_tls_client_connection_gnutls_class_init (GTlsClientConnectionGnutlsClass *klas
 
   connection_gnutls_class->failed           = g_tls_client_connection_gnutls_failed;
   connection_gnutls_class->begin_handshake  = g_tls_client_connection_gnutls_begin_handshake;
-  connection_gnutls_class->verify_peer      = g_tls_client_connection_gnutls_verify_peer;
   connection_gnutls_class->finish_handshake = g_tls_client_connection_gnutls_finish_handshake;
 
   g_object_class_override_property (gobject_class, PROP_VALIDATION_FLAGS, "validation-flags");
index cce2152..2431a04 100755 (executable)
 #endif
 
 #include <glib/gi18n-lib.h>
-#include <TIZEN.h>
+
+#include "TIZEN.h"
+
+#if ENABLE(TIZEN_PERFORMANCE_TEST_LOG)
+#include <sys/prctl.h>
+#ifndef PR_TASK_PERF_USER_TRACE
+#define PR_TASK_PERF_USER_TRACE 666
+#endif
+#define HWCLOCK_LOG(s) {const char *str=s; prctl(PR_TASK_PERF_USER_TRACE, str, strlen(str));}
+#endif
 
 static ssize_t g_tls_connection_gnutls_push_func (gnutls_transport_ptr_t  transport_data,
                                                  const void             *buf,
@@ -61,6 +70,14 @@ static P11KitPin*    on_pin_prompt_callback  (const char     *pinfile,
 
 static void g_tls_connection_gnutls_init_priorities (void);
 
+static gboolean do_implicit_handshake (GTlsConnectionGnutls  *gnutls,
+                                      gboolean               blocking,
+                                      GCancellable          *cancellable,
+                                      GError               **error);
+static gboolean finish_handshake (GTlsConnectionGnutls  *gnutls,
+                                 GTask                 *thread_task,
+                                 GError               **error);
+
 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GTlsConnectionGnutls, g_tls_connection_gnutls, G_TYPE_TLS_CONNECTION,
                                  G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
                                                         g_tls_connection_gnutls_initable_iface_init);
@@ -88,18 +105,48 @@ struct _GTlsConnectionGnutlsPrivate
   GPollableInputStream *base_istream;
   GPollableOutputStream *base_ostream;
 
-  gnutls_certificate_credentials creds;
-  gnutls_session session;
+  gnutls_certificate_credentials_t creds;
+  gnutls_session_t session;
 
   GTlsCertificate *certificate, *peer_certificate;
   GTlsCertificateFlags peer_certificate_errors;
+  GTlsCertificate *peer_certificate_tmp;
+  GTlsCertificateFlags peer_certificate_errors_tmp;
+
   gboolean require_close_notify;
   GTlsRehandshakeMode rehandshake_mode;
   gboolean is_system_certdb;
   GTlsDatabase *database;
   gboolean database_is_unset;
-  gboolean need_handshake, handshaking, ever_handshaked;
-  gboolean closing;
+
+  /* need_handshake means the next claim_op() will get diverted into
+   * an implicit handshake (unless it's an OP_HANDSHAKE or OP_CLOSE).
+   * need_finish_handshake means the next claim_op() will get diverted
+   * into finish_handshake() (unless it's an OP_CLOSE).
+   *
+   * handshaking is TRUE as soon as a handshake thread is queued. For
+   * a sync handshake it becomes FALSE after finish_handshake()
+   * completes in the calling thread, but for an async implicit
+   * handshake, it becomes FALSE (and need_finish_handshake becomes
+   * TRUE) at the end of the handshaking thread (and then the next
+   * non-close op will call finish_handshake()). We can't just wait
+   * for handshake_thread_completed() to run, because it's possible
+   * that its main loop is being blocked by a synchronous op which is
+   * waiting for handshaking to become FALSE...
+   *
+   * started_handshake indicates that the current handshake attempt
+   * got at least as far as calling gnutls_handshake() (and so any
+   * error should be copied to handshake_error and returned on all
+   * future operations). ever_handshaked indicates that TLS has
+   * been successfully negotiated at some point.
+   */
+  gboolean need_handshake, need_finish_handshake;
+  gboolean started_handshake, handshaking, ever_handshaked;
+  GTask *implicit_handshake;
+  GError *handshake_error;
+  GByteArray *app_data_buf;
+
+  gboolean closing, closed;
 
   GInputStream *tls_istream;
   GOutputStream *tls_ostream;
@@ -107,16 +154,22 @@ struct _GTlsConnectionGnutlsPrivate
   GTlsInteraction *interaction;
   gchar *interaction_id;
 
-  GError *error;
-  GCancellable *cancellable;
-  gboolean blocking;
+  GMutex        op_mutex;
+  GCancellable *waiting_for_op;
+
+  gboolean      reading;
+  gboolean      read_blocking;
+  GError       *read_error;
+  GCancellable *read_cancellable;
+
+  gboolean      writing;
+  gboolean      write_blocking;
+  GError       *write_error;
+  GCancellable *write_cancellable;
+
 #ifndef GNUTLS_E_PREMATURE_TERMINATION
   gboolean eof;
 #endif
-  GIOCondition internal_direction;
-#if ENABLE(TIZEN_NPN)
-  gboolean is_npn_set;
-#endif
 };
 
 static gint unique_interaction_id = 0;
@@ -144,38 +197,56 @@ g_tls_connection_gnutls_init (GTlsConnectionGnutls *gnutls)
   p11_kit_pin_register_callback (gnutls->priv->interaction_id,
                                  on_pin_prompt_callback, gnutls, NULL);
 #endif
+
+  gnutls->priv->waiting_for_op = g_cancellable_new ();
+  g_cancellable_cancel (gnutls->priv->waiting_for_op);
+  g_mutex_init (&gnutls->priv->op_mutex);
 }
 
+/* First field is "ssl3 only", second is "allow unsafe rehandshaking" */
 static gnutls_priority_t priorities[2][2];
 
+#if ENABLE(TIZEN_TV_UPDATE_DEFAULT_PRIORITY)
+#define DEFAULT_BASE_PRIORITY "NORMAL:%COMPAT:%LATEST_RECORD_VERSION"
+#endif
+
 static void
 g_tls_connection_gnutls_init_priorities (void)
 {
-  /* First field is "ssl3 only", second is "allow unsafe rehandshaking" */
-#if ENABLE(TIZEN_TLS11_AND_TLS12_SUPPORT_DISABLE)
-  gnutls_priority_init (&priorities[FALSE][FALSE],
-                       "NORMAL:%COMPAT:!VERS-TLS1.2:!VERS-TLS1.1",
-                       NULL);
+  const gchar *base_priority;
+  gchar *ssl3_priority, *unsafe_rehandshake_priority, *ssl3_unsafe_rehandshake_priority;
+  int ret;
+
+  base_priority = g_getenv ("G_TLS_GNUTLS_PRIORITY");
+  if (!base_priority)
+    base_priority = "NORMAL:%COMPAT";
+#if ENABLE(TIZEN_TV_UPDATE_DEFAULT_PRIORITY)
+  ret = gnutls_priority_init (&priorities[FALSE][FALSE], DEFAULT_BASE_PRIORITY, NULL);
 #else
-  gnutls_priority_init (&priorities[FALSE][FALSE],
-                       "NORMAL:%COMPAT",
-                       NULL);
+  ret = gnutls_priority_init (&priorities[FALSE][FALSE], base_priority, NULL);
 #endif
-  gnutls_priority_init (&priorities[TRUE][FALSE],
-                       "NORMAL:%COMPAT:!VERS-TLS1.2:!VERS-TLS1.1:!VERS-TLS1.0",
-                       NULL);
-#if ENABLE(TIZEN_TLS11_AND_TLS12_SUPPORT_DISABLE)
-  gnutls_priority_init (&priorities[FALSE][TRUE],
-                       "NORMAL:%COMPAT:!VERS-TLS1.2:!VERS-TLS1.1:%UNSAFE_RENEGOTIATION",
-                       NULL);
+  if (ret == GNUTLS_E_INVALID_REQUEST)
+    {
+      g_warning ("G_TLS_GNUTLS_PRIORITY is invalid; ignoring!");
+      base_priority = "NORMAL:%COMPAT";
+#if ENABLE(TIZEN_TV_UPDATE_DEFAULT_PRIORITY)
+      gnutls_priority_init (&priorities[FALSE][FALSE], DEFAULT_BASE_PRIORITY, NULL);
 #else
-  gnutls_priority_init (&priorities[FALSE][TRUE],
-                       "NORMAL:%COMPAT:%UNSAFE_RENEGOTIATION",
-                       NULL);
+      gnutls_priority_init (&priorities[FALSE][FALSE], base_priority, NULL);
 #endif
-  gnutls_priority_init (&priorities[TRUE][TRUE],
-                       "NORMAL:%COMPAT:!VERS-TLS1.2:!VERS-TLS1.1:!VERS-TLS1.0:%UNSAFE_RENEGOTIATION",
-                       NULL);
+    }
+
+  ssl3_priority = g_strdup_printf ("%s:!VERS-TLS1.2:!VERS-TLS1.1:!VERS-TLS1.0", base_priority);
+  unsafe_rehandshake_priority = g_strdup_printf ("%s:%%UNSAFE_RENEGOTIATION", base_priority);
+  ssl3_unsafe_rehandshake_priority = g_strdup_printf ("%s:!VERS-TLS1.2:!VERS-TLS1.1:!VERS-TLS1.0:%%UNSAFE_RENEGOTIATION", base_priority);
+
+  gnutls_priority_init (&priorities[TRUE][FALSE], ssl3_priority, NULL);
+  gnutls_priority_init (&priorities[FALSE][TRUE], unsafe_rehandshake_priority, NULL);
+  gnutls_priority_init (&priorities[TRUE][TRUE], ssl3_unsafe_rehandshake_priority, NULL);
+
+  g_free (ssl3_priority);
+  g_free (unsafe_rehandshake_priority);
+  g_free (ssl3_unsafe_rehandshake_priority);
 }
 
 static void
@@ -239,39 +310,38 @@ g_tls_connection_gnutls_initable_init (GInitable     *initable,
 static void
 g_tls_connection_gnutls_finalize (GObject *object)
 {
-  GTlsConnectionGnutls *connection = G_TLS_CONNECTION_GNUTLS (object);
-
-  if (connection->priv->base_io_stream)
-    g_object_unref (connection->priv->base_io_stream);
-
-  if (connection->priv->session)
-    gnutls_deinit (connection->priv->session);
+  GTlsConnectionGnutls *gnutls = G_TLS_CONNECTION_GNUTLS (object);
 
-  if (connection->priv->tls_istream)
-    g_object_unref (connection->priv->tls_istream);
-  if (connection->priv->tls_ostream) 
-    g_object_unref (connection->priv->tls_ostream);
+  g_clear_object (&gnutls->priv->base_io_stream);
 
-  if (connection->priv->creds)
-    gnutls_certificate_free_credentials (connection->priv->creds);
+  g_clear_object (&gnutls->priv->tls_istream);
+  g_clear_object (&gnutls->priv->tls_ostream);
 
-  if (connection->priv->database)
-    g_object_unref (connection->priv->database);
-  if (connection->priv->certificate)
-    g_object_unref (connection->priv->certificate);
-  if (connection->priv->peer_certificate)
-    g_object_unref (connection->priv->peer_certificate);
+  if (gnutls->priv->session)
+    gnutls_deinit (gnutls->priv->session);
+  if (gnutls->priv->creds)
+    gnutls_certificate_free_credentials (gnutls->priv->creds);
 
-  g_clear_object (&connection->priv->interaction);
+  g_clear_object (&gnutls->priv->database);
+  g_clear_object (&gnutls->priv->certificate);
+  g_clear_object (&gnutls->priv->peer_certificate);
+  g_clear_object (&gnutls->priv->peer_certificate_tmp);
 
-  if (connection->priv->error)
-    g_error_free (connection->priv->error);
+  g_clear_pointer (&gnutls->priv->app_data_buf, g_byte_array_unref);
 
 #ifdef HAVE_PKCS11
-  p11_kit_pin_unregister_callback (connection->priv->interaction_id,
-                                   on_pin_prompt_callback, connection);
+  p11_kit_pin_unregister_callback (gnutls->priv->interaction_id,
+                                   on_pin_prompt_callback, gnutls);
 #endif
-  g_free (connection->priv->interaction_id);
+  g_free (gnutls->priv->interaction_id);
+  g_clear_object (&gnutls->priv->interaction);
+
+  g_clear_error (&gnutls->priv->handshake_error);
+  g_clear_error (&gnutls->priv->read_error);
+  g_clear_error (&gnutls->priv->write_error);
+
+  g_clear_object (&gnutls->priv->waiting_for_op);
+  g_mutex_clear (&gnutls->priv->op_mutex);
 
   G_OBJECT_CLASS (g_tls_connection_gnutls_parent_class)->finalize (object);
 }
@@ -389,6 +459,7 @@ g_tls_connection_gnutls_set_property (GObject      *object,
               gnutls->priv->database = g_tls_backend_get_default_database (backend);
             }
           gnutls->priv->is_system_certdb = system_certdb;
+          gnutls->priv->database_is_unset = FALSE;
         }
       break;
 
@@ -415,13 +486,13 @@ g_tls_connection_gnutls_set_property (GObject      *object,
     }
 }
 
-gnutls_certificate_credentials
+gnutls_certificate_credentials_t
 g_tls_connection_gnutls_get_credentials (GTlsConnectionGnutls *gnutls)
 {
   return gnutls->priv->creds;
 }
 
-gnutls_session
+gnutls_session_t
 g_tls_connection_gnutls_get_session (GTlsConnectionGnutls *gnutls)
 {
   /* Ideally we would initialize gnutls->priv->session from
@@ -455,57 +526,232 @@ g_tls_connection_gnutls_get_certificate (GTlsConnectionGnutls *gnutls,
                                      gnutls->priv->interaction_id, st);
 }
 
+typedef enum {
+  G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE,
+  G_TLS_CONNECTION_GNUTLS_OP_READ,
+  G_TLS_CONNECTION_GNUTLS_OP_WRITE,
+  G_TLS_CONNECTION_GNUTLS_OP_CLOSE,
+} GTlsConnectionGnutlsOp;
+
+static gboolean
+claim_op (GTlsConnectionGnutls    *gnutls,
+         GTlsConnectionGnutlsOp   op,
+         gboolean                 blocking,
+         GCancellable            *cancellable,
+         GError                 **error)
+{
+ try_again:
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+
+  g_mutex_lock (&gnutls->priv->op_mutex);
+
+  if (gnutls->priv->closing || gnutls->priv->closed)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                          _("Connection is closed"));
+      g_mutex_unlock (&gnutls->priv->op_mutex);
+      return FALSE;
+    }
+
+  if (gnutls->priv->handshake_error && op != G_TLS_CONNECTION_GNUTLS_OP_CLOSE)
+    {
+      if (error)
+       *error = g_error_copy (gnutls->priv->handshake_error);
+      g_mutex_unlock (&gnutls->priv->op_mutex);
+      return FALSE;
+    }
+
+  if (op != G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE &&
+      op != G_TLS_CONNECTION_GNUTLS_OP_CLOSE)
+    {
+      if (gnutls->priv->need_handshake)
+       {
+         gnutls->priv->need_handshake = FALSE;
+         gnutls->priv->handshaking = TRUE;
+         if (!do_implicit_handshake (gnutls, blocking, cancellable, error))
+           {
+             g_mutex_unlock (&gnutls->priv->op_mutex);
+             return FALSE;
+           }
+       }
+
+      if (gnutls->priv->need_finish_handshake &&
+         gnutls->priv->implicit_handshake)
+       {
+         GError *my_error = NULL;
+         gboolean success;
+
+         gnutls->priv->need_finish_handshake = FALSE;
+
+         g_mutex_unlock (&gnutls->priv->op_mutex);
+         success = finish_handshake (gnutls, gnutls->priv->implicit_handshake, &my_error);
+         g_clear_object (&gnutls->priv->implicit_handshake);
+         g_mutex_lock (&gnutls->priv->op_mutex);
+
+         if (!success || g_cancellable_set_error_if_cancelled (cancellable, &my_error))
+           {
+             g_propagate_error (error, my_error);
+             g_mutex_unlock (&gnutls->priv->op_mutex);
+             return FALSE;
+           }
+       }
+    }
+
+  if ((op != G_TLS_CONNECTION_GNUTLS_OP_WRITE && gnutls->priv->reading) ||
+      (op != G_TLS_CONNECTION_GNUTLS_OP_READ && gnutls->priv->writing) ||
+      (op != G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE && gnutls->priv->handshaking))
+    {
+      GPollFD fds[2];
+      int nfds;
+
+      g_cancellable_reset (gnutls->priv->waiting_for_op);
+
+      g_mutex_unlock (&gnutls->priv->op_mutex);
+
+      if (!blocking)
+       {
+         g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK,
+                              _("Operation would block"));
+         return FALSE;
+       }
+
+      g_cancellable_make_pollfd (gnutls->priv->waiting_for_op, &fds[0]);
+      if (g_cancellable_make_pollfd (cancellable, &fds[1]))
+       nfds = 2;
+      else
+       nfds = 1;
+      g_poll (fds, nfds, -1);
+      g_cancellable_release_fd (cancellable);
+
+      goto try_again;
+    }
+
+  if (op == G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE)
+    {
+      gnutls->priv->handshaking = TRUE;
+      gnutls->priv->need_handshake = FALSE;
+    }
+  if (op == G_TLS_CONNECTION_GNUTLS_OP_CLOSE)
+    gnutls->priv->closing = TRUE;
+
+  if (op != G_TLS_CONNECTION_GNUTLS_OP_WRITE)
+    gnutls->priv->reading = TRUE;
+  if (op != G_TLS_CONNECTION_GNUTLS_OP_READ)
+    gnutls->priv->writing = TRUE;
+
+  g_mutex_unlock (&gnutls->priv->op_mutex);
+  return TRUE;
+}
+
+static void
+yield_op (GTlsConnectionGnutls   *gnutls,
+         GTlsConnectionGnutlsOp  op)
+{
+  g_mutex_lock (&gnutls->priv->op_mutex);
+
+  if (op == G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE)
+    gnutls->priv->handshaking = FALSE;
+  if (op == G_TLS_CONNECTION_GNUTLS_OP_CLOSE)
+    gnutls->priv->closing = FALSE;
+
+  if (op != G_TLS_CONNECTION_GNUTLS_OP_WRITE)
+    gnutls->priv->reading = FALSE;
+  if (op != G_TLS_CONNECTION_GNUTLS_OP_READ)
+    gnutls->priv->writing = FALSE;
+
+  g_cancellable_cancel (gnutls->priv->waiting_for_op);
+  g_mutex_unlock (&gnutls->priv->op_mutex);
+}
+
 static void
 begin_gnutls_io (GTlsConnectionGnutls  *gnutls,
+                GIOCondition           direction,
                 gboolean               blocking,
                 GCancellable          *cancellable)
 {
-  gnutls->priv->blocking = blocking;
-  gnutls->priv->cancellable = cancellable;
-  gnutls->priv->internal_direction = 0;
-  if (cancellable)
-    g_cancellable_push_current (cancellable);
-  g_clear_error (&gnutls->priv->error);
+  g_assert (direction & (G_IO_IN | G_IO_OUT));
+
+  if (direction & G_IO_IN)
+    {
+      gnutls->priv->read_blocking = blocking;
+      gnutls->priv->read_cancellable = cancellable;
+      g_clear_error (&gnutls->priv->read_error);
+    }
+
+  if (direction & G_IO_OUT)
+    {
+      gnutls->priv->write_blocking = blocking;
+      gnutls->priv->write_cancellable = cancellable;
+      g_clear_error (&gnutls->priv->write_error);
+    }
 }
 
 static int
 end_gnutls_io (GTlsConnectionGnutls  *gnutls,
+              GIOCondition           direction,
               int                    status,
+              const char            *errmsg,
               GError               **error)
 {
-  if (gnutls->priv->cancellable)
-    g_cancellable_pop_current (gnutls->priv->cancellable);
-  gnutls->priv->cancellable = NULL;
+  GError *my_error = NULL;
 
-  if (status >= 0)
+  g_assert (direction & (G_IO_IN | G_IO_OUT));
+  g_assert (!error || !*error);
+
+  if (status == GNUTLS_E_AGAIN ||
+      status == GNUTLS_E_WARNING_ALERT_RECEIVED)
+    return GNUTLS_E_AGAIN;
+
+  if (direction & G_IO_IN)
     {
-      g_clear_error (&gnutls->priv->error);
-      return status;
+      gnutls->priv->read_cancellable = NULL;
+      if (status < 0)
+       {
+         my_error = gnutls->priv->read_error;
+         gnutls->priv->read_error = NULL;
+       }
+      else
+       g_clear_error (&gnutls->priv->read_error);
+    }
+  if (direction & G_IO_OUT)
+    {
+      gnutls->priv->write_cancellable = NULL;
+      if (status < 0 && !my_error)
+       {
+         my_error = gnutls->priv->write_error;
+         gnutls->priv->write_error = NULL;
+       }
+      else
+       g_clear_error (&gnutls->priv->write_error);
     }
 
+  if (status >= 0)
+    return status;
+
   if (gnutls->priv->handshaking && !gnutls->priv->ever_handshaked)
     {
-      if (g_error_matches (gnutls->priv->error, G_IO_ERROR, G_IO_ERROR_FAILED) ||
+      if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_FAILED) ||
+#if GLIB_CHECK_VERSION (2, 35, 3)
+         g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_BROKEN_PIPE) ||
+#endif
          status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH ||
          status == GNUTLS_E_FATAL_ALERT_RECEIVED ||
          status == GNUTLS_E_DECRYPTION_FAILED ||
          status == GNUTLS_E_UNSUPPORTED_VERSION_PACKET)
        {
-         g_clear_error (&gnutls->priv->error);
+         g_clear_error (&my_error);
          g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_NOT_TLS,
                               _("Peer failed to perform TLS handshake"));
          return GNUTLS_E_PULL_ERROR;
        }
     }
 
-  if (gnutls->priv->error)
+  if (my_error)
     {
-      if (g_error_matches (gnutls->priv->error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-       status = GNUTLS_E_AGAIN;
-      else
+      if (!g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
        G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->failed (gnutls);
-      g_propagate_error (error, gnutls->priv->error);
-      gnutls->priv->error = NULL;
+      g_propagate_error (error, my_error);
       return status;
     }
   else if (status == GNUTLS_E_REHANDSHAKE)
@@ -517,7 +763,10 @@ end_gnutls_io (GTlsConnectionGnutls  *gnutls,
          return GNUTLS_E_PULL_ERROR;
        }
 
-      gnutls->priv->need_handshake = TRUE;
+      g_mutex_lock (&gnutls->priv->op_mutex);
+      if (!gnutls->priv->handshaking)
+       gnutls->priv->need_handshake = TRUE;
+      g_mutex_unlock (&gnutls->priv->op_mutex);
       return status;
     }
   else if (
@@ -528,7 +777,13 @@ end_gnutls_io (GTlsConnectionGnutls  *gnutls,
 #endif
           )
     {
-      if (gnutls->priv->require_close_notify)
+      if (gnutls->priv->handshaking && !gnutls->priv->ever_handshaked)
+       {
+         g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_NOT_TLS,
+                              _("Peer failed to perform TLS handshake"));
+         return GNUTLS_E_PULL_ERROR;
+       }
+      else if (gnutls->priv->require_close_notify)
        {
          g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
                               _("TLS connection closed unexpectedly"));
@@ -538,35 +793,41 @@ end_gnutls_io (GTlsConnectionGnutls  *gnutls,
       else
        return 0;
     }
+  else if (status == GNUTLS_E_NO_CERTIFICATE_FOUND)
+    {
+      g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_CERTIFICATE_REQUIRED,
+                           _("TLS connection peer did not send a certificate"));
+      return status;
+    }
 
+  if (error)
+    {
+      g_set_error (error, G_TLS_ERROR, G_TLS_ERROR_MISC,
+                   errmsg, gnutls_strerror (status));
+    }
   return status;
 }
 
-#define BEGIN_GNUTLS_IO(gnutls, blocking, cancellable) \
-  begin_gnutls_io (gnutls, blocking, cancellable);     \
+#define BEGIN_GNUTLS_IO(gnutls, direction, blocking, cancellable)      \
+  begin_gnutls_io (gnutls, direction, blocking, cancellable);          \
   do {
 
-#define END_GNUTLS_IO(gnutls, ret, errmsg, error)      \
-  } while ((ret == GNUTLS_E_AGAIN ||                   \
-            ret == GNUTLS_E_WARNING_ALERT_RECEIVED) && \
-           !gnutls->priv->error);                      \
-  ret = end_gnutls_io (gnutls, ret, error);            \
-  if (ret < 0 && ret != GNUTLS_E_REHANDSHAKE && error && !*error) \
-    {                                                  \
-      g_set_error (error, G_TLS_ERROR, G_TLS_ERROR_MISC,\
-                   errmsg, gnutls_strerror (ret));     \
-    }                                                  \
-  ;
+#define END_GNUTLS_IO(gnutls, direction, ret, errmsg, err)             \
+  } while ((ret = end_gnutls_io (gnutls, direction, ret, errmsg, err)) == GNUTLS_E_AGAIN);
 
 gboolean
 g_tls_connection_gnutls_check (GTlsConnectionGnutls  *gnutls,
                               GIOCondition           condition)
 {
-  if (!gnutls->priv->internal_direction)
+  /* Racy, but worst case is that we just get WOULD_BLOCK back */
+  if (gnutls->priv->need_finish_handshake)
     return TRUE;
 
+  /* If a handshake or close is in progress, then tls_istream and
+   * tls_ostream are blocked, regardless of the base stream status.
+   */
   if (gnutls->priv->handshaking || gnutls->priv->closing)
-    condition = gnutls->priv->internal_direction;
+    return FALSE;
 
   if (condition & G_IO_IN)
     return g_pollable_input_stream_is_readable (gnutls->priv->base_istream);
@@ -575,13 +836,16 @@ g_tls_connection_gnutls_check (GTlsConnectionGnutls  *gnutls,
 }
 
 typedef struct {
-  GSource source;
+  GSource               source;
 
   GTlsConnectionGnutls *gnutls;
   GObject              *stream;
 
   GSource              *child_source;
-  GIOCondition          current_direction;
+  GIOCondition          condition;
+
+  gboolean              io_waiting;
+  gboolean              op_waiting;
 } GTlsConnectionGnutlsSource;
 
 static gboolean
@@ -598,40 +862,51 @@ gnutls_source_check (GSource *source)
   return FALSE;
 }
 
-static gboolean
-gnutls_source_sync_child_source (GTlsConnectionGnutlsSource *gnutls_source)
+static void
+gnutls_source_sync (GTlsConnectionGnutlsSource *gnutls_source)
 {
   GTlsConnectionGnutls *gnutls = gnutls_source->gnutls;
-  GSource *source = (GSource *)gnutls_source;
-  GIOCondition direction;
+  gboolean io_waiting, op_waiting;
 
-  if (gnutls->priv->handshaking || gnutls->priv->closing)
-    direction = gnutls->priv->internal_direction;
-  else if (!gnutls_source->stream)
-    return FALSE;
-  else if (G_IS_TLS_INPUT_STREAM_GNUTLS (gnutls_source->stream))
-    direction = G_IO_IN;
+  g_mutex_lock (&gnutls->priv->op_mutex);
+  if (((gnutls_source->condition & G_IO_IN) && gnutls->priv->reading) ||
+      ((gnutls_source->condition & G_IO_OUT) && gnutls->priv->writing) ||
+      (gnutls->priv->handshaking && !gnutls->priv->need_finish_handshake))
+    op_waiting = TRUE;
   else
-    direction = G_IO_OUT;
+    op_waiting = FALSE;
 
-  if (direction == gnutls_source->current_direction)
-    return TRUE;
+  if (!op_waiting && !gnutls->priv->need_handshake &&
+      !gnutls->priv->need_finish_handshake)
+    io_waiting = TRUE;
+  else
+    io_waiting = FALSE;
+  g_mutex_unlock (&gnutls->priv->op_mutex);
+
+  if (op_waiting == gnutls_source->op_waiting &&
+      io_waiting == gnutls_source->io_waiting)
+    return;
+  gnutls_source->op_waiting = op_waiting;
+  gnutls_source->io_waiting = io_waiting;
 
   if (gnutls_source->child_source)
     {
-      g_source_remove_child_source (source, gnutls_source->child_source);
+      g_source_remove_child_source ((GSource *)gnutls_source,
+                                   gnutls_source->child_source);
       g_source_unref (gnutls_source->child_source);
     }
 
-  if (direction & G_IO_IN)
+  if (op_waiting)
+    gnutls_source->child_source = g_cancellable_source_new (gnutls->priv->waiting_for_op);
+  else if (io_waiting && G_IS_POLLABLE_INPUT_STREAM (gnutls_source->stream))
     gnutls_source->child_source = g_pollable_input_stream_create_source (gnutls->priv->base_istream, NULL);
-  else
+  else if (io_waiting && G_IS_POLLABLE_OUTPUT_STREAM (gnutls_source->stream))
     gnutls_source->child_source = g_pollable_output_stream_create_source (gnutls->priv->base_ostream, NULL);
+  else
+    gnutls_source->child_source = g_timeout_source_new (0);
 
   g_source_set_dummy_callback (gnutls_source->child_source);
-  g_source_add_child_source (source, gnutls_source->child_source);
-  gnutls_source->current_direction = direction;
-  return TRUE;
+  g_source_add_child_source ((GSource *)gnutls_source, gnutls_source->child_source);
 }
 
 static gboolean
@@ -645,7 +920,7 @@ gnutls_source_dispatch (GSource     *source,
 
   ret = (*func) (gnutls_source->stream, user_data);
   if (ret)
-    ret = gnutls_source_sync_child_source (gnutls_source);
+    gnutls_source_sync (gnutls_source);
 
   return ret;
 }
@@ -656,9 +931,7 @@ gnutls_source_finalize (GSource *source)
   GTlsConnectionGnutlsSource *gnutls_source = (GTlsConnectionGnutlsSource *)source;
 
   g_object_unref (gnutls_source->gnutls);
-
-  if (gnutls_source->child_source)
-    g_source_unref (gnutls_source->child_source);
+  g_source_unref (gnutls_source->child_source);
 }
 
 static gboolean
@@ -707,11 +980,15 @@ g_tls_connection_gnutls_create_source (GTlsConnectionGnutls  *gnutls,
   g_source_set_name (source, "GTlsConnectionGnutlsSource");
   gnutls_source = (GTlsConnectionGnutlsSource *)source;
   gnutls_source->gnutls = g_object_ref (gnutls);
+  gnutls_source->condition = condition;
   if (condition & G_IO_IN)
     gnutls_source->stream = G_OBJECT (gnutls->priv->tls_istream);
   else if (condition & G_IO_OUT)
     gnutls_source->stream = G_OBJECT (gnutls->priv->tls_ostream);
-  gnutls_source_sync_child_source (gnutls_source);
+
+  gnutls_source->op_waiting = (gboolean) -1;
+  gnutls_source->io_waiting = (gboolean) -1;
+  gnutls_source_sync (gnutls_source);
 
   if (cancellable)
     {
@@ -725,15 +1002,20 @@ g_tls_connection_gnutls_create_source (GTlsConnectionGnutls  *gnutls,
 }
 
 static void
-set_gnutls_error (GTlsConnectionGnutls *gnutls, GIOCondition direction)
+set_gnutls_error (GTlsConnectionGnutls *gnutls,
+                 GError               *error)
 {
-  if (g_error_matches (gnutls->priv->error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+  /* We set EINTR rather than EAGAIN for G_IO_ERROR_WOULD_BLOCK so
+   * that GNUTLS_E_AGAIN only gets returned for gnutls-internal
+   * reasons, not for actual socket EAGAINs (and we have access
+   * to @error at the higher levels, so we can distinguish them
+   * that way later).
+   */
+
+  if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+    gnutls_transport_set_errno (gnutls->priv->session, EINTR);
+  else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
     gnutls_transport_set_errno (gnutls->priv->session, EINTR);
-  else if (g_error_matches (gnutls->priv->error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      gnutls_transport_set_errno (gnutls->priv->session, EAGAIN);
-      gnutls->priv->internal_direction = direction;
-    }
   else
     gnutls_transport_set_errno (gnutls->priv->session, EIO);
 }
@@ -746,31 +1028,22 @@ g_tls_connection_gnutls_pull_func (gnutls_transport_ptr_t  transport_data,
   GTlsConnectionGnutls *gnutls = transport_data;
   ssize_t ret;
 
-  /* If gnutls->priv->error is non-%NULL when we're called, it means
+  /* If gnutls->priv->read_error is non-%NULL when we're called, it means
    * that an error previously occurred, but gnutls decided not to
    * propagate it. So it's correct for us to just clear it. (Usually
    * this means it ignored an EAGAIN after a short read, and now
    * we'll return EAGAIN again, which it will obey this time.)
    */
-  g_clear_error (&gnutls->priv->error);
+  g_clear_error (&gnutls->priv->read_error);
 
-  if (gnutls->priv->blocking)
-    {
-      ret = g_input_stream_read (G_INPUT_STREAM (gnutls->priv->base_istream),
-                                buf, buflen,
-                                gnutls->priv->cancellable,
-                                &gnutls->priv->error);
-    }
-  else
-    {
-      ret = g_pollable_input_stream_read_nonblocking (gnutls->priv->base_istream,
-                                                     buf, buflen,
-                                                     gnutls->priv->cancellable,
-                                                     &gnutls->priv->error);
-    }
+  ret = g_pollable_stream_read (G_INPUT_STREAM (gnutls->priv->base_istream),
+                               buf, buflen,
+                               gnutls->priv->read_blocking,
+                               gnutls->priv->read_cancellable,
+                               &gnutls->priv->read_error);
 
   if (ret < 0)
-    set_gnutls_error (gnutls, G_IO_IN);
+    set_gnutls_error (gnutls, gnutls->priv->read_error);
 #ifndef GNUTLS_E_PREMATURE_TERMINATION
   else if (ret == 0)
     gnutls->priv->eof = TRUE;
@@ -788,137 +1061,266 @@ g_tls_connection_gnutls_push_func (gnutls_transport_ptr_t  transport_data,
   ssize_t ret;
 
   /* See comment in pull_func. */
-  g_clear_error (&gnutls->priv->error);
+  g_clear_error (&gnutls->priv->write_error);
+
+  ret = g_pollable_stream_write (G_OUTPUT_STREAM (gnutls->priv->base_ostream),
+                                buf, buflen,
+                                gnutls->priv->write_blocking,
+                                gnutls->priv->write_cancellable,
+                                &gnutls->priv->write_error);
+  if (ret < 0)
+    set_gnutls_error (gnutls, gnutls->priv->write_error);
 
-  if (gnutls->priv->blocking)
+  return ret;
+}
+
+
+static GTlsCertificate *
+get_peer_certificate_from_session (GTlsConnectionGnutls *gnutls)
+{
+  GTlsCertificate *chain, *cert;
+  const gnutls_datum_t *certs;
+  unsigned int num_certs;
+  int i;
+
+  certs = gnutls_certificate_get_peers (gnutls->priv->session, &num_certs);
+  if (!certs || !num_certs)
+    return NULL;
+
+  chain = NULL;
+  for (i = num_certs - 1; i >= 0; i--)
     {
-      ret = g_output_stream_write (G_OUTPUT_STREAM (gnutls->priv->base_ostream),
-                                  buf, buflen,
-                                  gnutls->priv->cancellable,
-                                  &gnutls->priv->error);
+      cert = g_tls_certificate_gnutls_new (&certs[i], chain);
+      if (chain)
+       g_object_unref (chain);
+      chain = cert;
     }
+
+  return chain;
+}
+
+static GTlsCertificateFlags
+verify_peer_certificate (GTlsConnectionGnutls *gnutls,
+                        GTlsCertificate      *peer_certificate)
+{
+  GTlsConnection *conn = G_TLS_CONNECTION (gnutls);
+  GSocketConnectable *peer_identity;
+  GTlsDatabase *database;
+  GTlsCertificateFlags errors;
+  gboolean is_client;
+
+  is_client = G_IS_TLS_CLIENT_CONNECTION (gnutls);
+  if (is_client)
+    peer_identity = g_tls_client_connection_get_server_identity (G_TLS_CLIENT_CONNECTION (gnutls));
   else
+    peer_identity = NULL;
+
+  errors = 0;
+
+  database = g_tls_connection_get_database (conn);
+  if (database == NULL)
     {
-      ret = g_pollable_output_stream_write_nonblocking (gnutls->priv->base_ostream,
-                                                       buf, buflen,
-                                                       gnutls->priv->cancellable,
-                                                       &gnutls->priv->error);
+
+#if ENABLE(TIZEN_TV_DLOG)
+      TIZEN_LOGI("[Network] SSL HandShake - Unknown CA");
+#endif
+
+      errors |= G_TLS_CERTIFICATE_UNKNOWN_CA;
+      errors |= g_tls_certificate_verify (peer_certificate, peer_identity, NULL);
+    }
+  else
+    {
+      GError *error = NULL;
+
+      errors |= g_tls_database_verify_chain (database, peer_certificate,
+                                            is_client ?
+                                            G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER :
+                                            G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT,
+                                            peer_identity,
+                                            g_tls_connection_get_interaction (conn),
+                                            G_TLS_DATABASE_VERIFY_NONE,
+                                            NULL, &error);
+      if (error)
+       {
+         g_warning ("failure verifying certificate chain: %s",
+                    error->message);
+         g_assert (errors != 0);
+         g_clear_error (&error);
+       }
     }
-  if (ret < 0)
-    set_gnutls_error (gnutls, G_IO_OUT);
 
-  return ret;
+  return errors;
 }
 
-static gboolean
-handshake_internal (GTlsConnectionGnutls  *gnutls,
-                   gboolean               blocking,
-                   GCancellable          *cancellable,
-                   GError               **error)
+static void
+handshake_thread (GTask        *task,
+                 gpointer      object,
+                 gpointer      task_data,
+                 GCancellable *cancellable)
 {
-  GTlsCertificate *peer_certificate = NULL;
-  GTlsCertificateFlags peer_certificate_errors = 0;
+  GTlsConnectionGnutls *gnutls = object;
+  gboolean is_client;
+  GError *error = NULL;
   int ret;
 
-  if (G_IS_TLS_SERVER_CONNECTION_GNUTLS (gnutls) &&
-      gnutls->priv->ever_handshaked && !gnutls->priv->handshaking &&
-      !gnutls->priv->need_handshake)
-    {
-      BEGIN_GNUTLS_IO (gnutls, blocking, cancellable);
-      ret = gnutls_rehandshake (gnutls->priv->session);
-      END_GNUTLS_IO (gnutls, ret, _("Error performing TLS handshake: %s"), error);
+  gnutls->priv->started_handshake = FALSE;
 
-      if (ret != 0)
-       return FALSE;
+  if (!claim_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE,
+                TRUE, cancellable, &error))
+    {
+      g_task_return_error (task, error);
+      return;
     }
 
-  if (!gnutls->priv->handshaking)
+  g_clear_error (&gnutls->priv->handshake_error);
+
+  is_client = G_IS_TLS_CLIENT_CONNECTION (gnutls);
+
+  if (!is_client && gnutls->priv->ever_handshaked &&
+      !gnutls->priv->implicit_handshake)
     {
-      gnutls->priv->handshaking = TRUE;
+      BEGIN_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, TRUE, cancellable);
+      ret = gnutls_rehandshake (gnutls->priv->session);
+      END_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, ret,
+                    _("Error performing TLS handshake: %s"), &error);
 
-      if (gnutls->priv->peer_certificate)
+      if (error)
        {
-         g_object_unref (gnutls->priv->peer_certificate);
-         gnutls->priv->peer_certificate = NULL;
-         gnutls->priv->peer_certificate_errors = 0;
-
-         g_object_notify (G_OBJECT (gnutls), "peer-certificate");
-         g_object_notify (G_OBJECT (gnutls), "peer-certificate-errors");
+         g_task_return_error (task, error);
+         return;
        }
-
-      g_tls_connection_gnutls_set_handshake_priority (gnutls);
-      G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->begin_handshake (gnutls);
     }
 
-  BEGIN_GNUTLS_IO (gnutls, blocking, cancellable);
-  ret = gnutls_handshake (gnutls->priv->session);
-  END_GNUTLS_IO (gnutls, ret, _("Error performing TLS handshake: %s"), error);
+  gnutls->priv->started_handshake = TRUE;
 
-  if (ret == GNUTLS_E_AGAIN)
-    return FALSE;
+  g_clear_object (&gnutls->priv->peer_certificate);
+  gnutls->priv->peer_certificate_errors = 0;
 
-  gnutls->priv->handshaking = FALSE;
-  gnutls->priv->need_handshake = FALSE;
-  gnutls->priv->ever_handshaked = TRUE;
+  g_tls_connection_gnutls_set_handshake_priority (gnutls);
 
-  if (ret == 0 &&
-      gnutls_certificate_type_get (gnutls->priv->session) == GNUTLS_CRT_X509)
+  BEGIN_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, TRUE, cancellable);
+  ret = gnutls_handshake (gnutls->priv->session);
+  if (ret == GNUTLS_E_GOT_APPLICATION_DATA)
     {
-      GTlsCertificate *chain, *cert;
-      const gnutls_datum_t *certs;
-      unsigned int num_certs;
-      int i;
-
-      certs = gnutls_certificate_get_peers (gnutls->priv->session, &num_certs);
-      chain = NULL;
-      if (certs)
+      guint8 buf[1024];
+
+      /* Got app data while waiting for rehandshake; buffer it and try again */
+      ret = gnutls_record_recv (gnutls->priv->session, buf, sizeof (buf));
+      if (ret > -1)
        {
-         for (i = num_certs - 1; i >= 0; i--)
-           {
-             cert = g_tls_certificate_gnutls_new (&certs[i], chain);
-             if (chain)
-               g_object_unref (chain);
-             chain = cert;
-           }
+         if (!gnutls->priv->app_data_buf)
+           gnutls->priv->app_data_buf = g_byte_array_new ();
+         g_byte_array_append (gnutls->priv->app_data_buf, buf, ret);
+         ret = GNUTLS_E_AGAIN;
        }
+    }
+  END_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, ret,
+                _("Error performing TLS handshake: %s"), &error);
 
-      peer_certificate = chain;
+  if (ret == 0 && gnutls_certificate_type_get (gnutls->priv->session) == GNUTLS_CRT_X509)
+    {
+      gnutls->priv->peer_certificate_tmp = get_peer_certificate_from_session (gnutls);
+      if (gnutls->priv->peer_certificate_tmp)
+       gnutls->priv->peer_certificate_errors_tmp = verify_peer_certificate (gnutls, gnutls->priv->peer_certificate_tmp);
+      else if (G_IS_TLS_CLIENT_CONNECTION (gnutls))
+       {
+         g_set_error_literal (&error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE,
+                              _("Server did not return a valid TLS certificate"));
+       }
     }
 
-  if (peer_certificate)
+  G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->finish_handshake (gnutls, &error);
+
+  if (error)
+    {
+      g_task_return_error (task, error);
+    }
+  else
     {
-      gboolean accepted;
+      gnutls->priv->ever_handshaked = TRUE;
+      g_task_return_boolean (task, TRUE);
+    }
+}
 
-      accepted = G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->verify_peer (gnutls, peer_certificate, &peer_certificate_errors);
+static gboolean
+accept_peer_certificate (GTlsConnectionGnutls *gnutls,
+                        GTlsCertificate      *peer_certificate,
+                        GTlsCertificateFlags  peer_certificate_errors)
+{
+  gboolean accepted;
 
-      gnutls->priv->peer_certificate = peer_certificate;
-      gnutls->priv->peer_certificate_errors = peer_certificate_errors;
+#if ENABLE(TIZEN_PERFORMANCE_TEST_LOG)
+  HWCLOCK_LOG("[BGN] gnutls_verify_peer");
+#endif
 
-      g_object_notify (G_OBJECT (gnutls), "peer-certificate");
-      g_object_notify (G_OBJECT (gnutls), "peer-certificate-errors");
+  if (G_IS_TLS_CLIENT_CONNECTION (gnutls))
+    {
+      GTlsCertificateFlags validation_flags =
+       g_tls_client_connection_get_validation_flags (G_TLS_CLIENT_CONNECTION (gnutls));
 
-      if (!accepted)
+      if ((peer_certificate_errors & validation_flags) == 0)
+       accepted = TRUE;
+      else
        {
-         g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE,
-                              _("Unacceptable TLS certificate"));
-         return FALSE;
+         accepted = g_tls_connection_emit_accept_certificate (G_TLS_CONNECTION (gnutls),
+                                                              peer_certificate,
+                                                              peer_certificate_errors);
        }
     }
+  else
+    {
+      accepted = g_tls_connection_emit_accept_certificate (G_TLS_CONNECTION (gnutls),
+                                                          peer_certificate,
+                                                          peer_certificate_errors);
+    }
+
+#if ENABLE(TIZEN_PERFORMANCE_TEST_LOG)
+  HWCLOCK_LOG("[END] gnutls_verify_peer");
+#endif
+
+  return accepted;
+}
 
-  G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->finish_handshake (gnutls, ret == 0, error);
-  return (ret == 0);
+static void
+begin_handshake (GTlsConnectionGnutls *gnutls)
+{
+  G_TLS_CONNECTION_GNUTLS_GET_CLASS (gnutls)->begin_handshake (gnutls);
 }
 
 static gboolean
-handshake_in_progress_or_failed (GTlsConnectionGnutls  *gnutls,
-                                gboolean               blocking,
-                                GCancellable          *cancellable,
-                                GError               **error)
+finish_handshake (GTlsConnectionGnutls  *gnutls,
+                 GTask                 *task,
+                 GError               **error)
 {
-  if (!(gnutls->priv->need_handshake || gnutls->priv->handshaking))
-    return FALSE;
+  GTlsCertificate *peer_certificate;
+  GTlsCertificateFlags peer_certificate_errors;
+
+  g_assert (error != NULL);
+
+  peer_certificate = gnutls->priv->peer_certificate_tmp;
+  gnutls->priv->peer_certificate_tmp = NULL;
+  peer_certificate_errors = gnutls->priv->peer_certificate_errors_tmp;
+  gnutls->priv->peer_certificate_errors_tmp = 0;
 
-  return !handshake_internal (gnutls, blocking, cancellable, error);
+  if (g_task_propagate_boolean (task, error) && peer_certificate)
+    {
+      if (!accept_peer_certificate (gnutls, peer_certificate,
+                                   peer_certificate_errors))
+       {
+         g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE,
+                              _("Unacceptable TLS certificate"));
+       }
+
+      gnutls->priv->peer_certificate = peer_certificate;
+      gnutls->priv->peer_certificate_errors = peer_certificate_errors;
+      g_object_notify (G_OBJECT (gnutls), "peer-certificate");
+      g_object_notify (G_OBJECT (gnutls), "peer-certificate-errors");
+    }
+
+  if (*error && gnutls->priv->started_handshake)
+    gnutls->priv->handshake_error = g_error_copy (*error);
+
+  return (*error == NULL);
 }
 
 static gboolean
@@ -927,40 +1329,84 @@ g_tls_connection_gnutls_handshake (GTlsConnection   *conn,
                                   GError          **error)
 {
   GTlsConnectionGnutls *gnutls = G_TLS_CONNECTION_GNUTLS (conn);
+  GTask *task;
+  gboolean success;
+  GError *my_error = NULL;
+
+  task = g_task_new (conn, cancellable, NULL, NULL);
+  begin_handshake (gnutls);
+  g_task_run_in_thread_sync (task, handshake_thread);
+  success = finish_handshake (gnutls, task, &my_error);
+  g_object_unref (task);
 
-  return handshake_internal (gnutls, TRUE, cancellable, error);
+  yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE);
+
+  if (my_error)
+    g_propagate_error (error, my_error);
+  return success;
 }
 
-static gboolean
-g_tls_connection_gnutls_handshake_ready (GObject  *pollable_stream,
-                                        gpointer  user_data)
+/* In the async version we use two GTasks; one to run handshake_thread() and
+ * then call handshake_thread_completed(), and a second to call the caller's
+ * original callback after we call finish_handshake().
+ */
+
+static void
+handshake_thread_completed (GObject      *object,
+                           GAsyncResult *result,
+                           gpointer      user_data)
 {
-  GTlsConnectionGnutls *gnutls;
-  GSimpleAsyncResult *simple = user_data;
-  gboolean success;
+  GTask *caller_task = user_data;
+  GTlsConnectionGnutls *gnutls = g_task_get_source_object (caller_task);
   GError *error = NULL;
+  gboolean need_finish_handshake, success;
 
-  gnutls = G_TLS_CONNECTION_GNUTLS (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
-  g_object_unref (gnutls);
-
-  success = handshake_internal (gnutls, FALSE, NULL, &error);
-  if (!success && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
+  g_mutex_lock (&gnutls->priv->op_mutex);
+  if (gnutls->priv->need_finish_handshake)
     {
-      g_error_free (error);
-      return TRUE;
+      need_finish_handshake = TRUE;
+      gnutls->priv->need_finish_handshake = FALSE;
     }
+  else
+    need_finish_handshake = FALSE;
+  g_mutex_unlock (&gnutls->priv->op_mutex);
 
-  if (error)
+  if (need_finish_handshake)
     {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
+      success = finish_handshake (gnutls, G_TASK (result), &error);
+      if (success)
+       g_task_return_boolean (caller_task, TRUE);
+      else
+       g_task_return_error (caller_task, error);
     }
+  else if (gnutls->priv->handshake_error)
+    g_task_return_error (caller_task, g_error_copy (gnutls->priv->handshake_error));
   else
-    g_simple_async_result_set_op_res_gboolean (simple, success);
-  g_simple_async_result_complete (simple);
-  g_object_unref (simple);
+    g_task_return_boolean (caller_task, TRUE);
 
-  return FALSE;
+  g_object_unref (caller_task);
+}
+
+static void
+async_handshake_thread (GTask        *task,
+                       gpointer      object,
+                       gpointer      task_data,
+                       GCancellable *cancellable)
+{
+  GTlsConnectionGnutls *gnutls = object;
+
+  handshake_thread (task, object, task_data, cancellable);
+
+  g_mutex_lock (&gnutls->priv->op_mutex);
+  gnutls->priv->need_finish_handshake = TRUE;
+  /* yield_op will clear handshaking too, but we don't want the
+   * connection to be briefly "handshaking && need_finish_handshake"
+   * after we unlock the mutex.
+   */
+  gnutls->priv->handshaking = FALSE;
+  g_mutex_unlock (&gnutls->priv->op_mutex);
+
+  yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE);
 }
 
 static void
@@ -970,40 +1416,18 @@ g_tls_connection_gnutls_handshake_async (GTlsConnection       *conn,
                                         GAsyncReadyCallback   callback,
                                         gpointer              user_data)
 {
-  GTlsConnectionGnutls *gnutls = G_TLS_CONNECTION_GNUTLS (conn);
-  GSimpleAsyncResult *simple;
-  gboolean success;
-  GError *error = NULL;
-  GSource *source;
+  GTask *thread_task, *caller_task;
 
-  simple = g_simple_async_result_new (G_OBJECT (conn), callback, user_data,
-                                     g_tls_connection_gnutls_handshake_async);
-  success = handshake_internal (gnutls, FALSE, cancellable, &error);
-  if (success)
-    {
-      g_simple_async_result_set_op_res_gboolean (simple, TRUE);
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-      return;
-    }
-  else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-      return;
-    }
-  else if (error)
-    g_error_free (error);
-
-  source = g_tls_connection_gnutls_create_source (gnutls, 0, cancellable);
-  g_source_set_callback (source,
-                        (GSourceFunc) g_tls_connection_gnutls_handshake_ready,
-                        simple, NULL);
-  g_source_set_priority (source, io_priority);
-  g_source_attach (source, g_main_context_get_thread_default ());
-  g_source_unref (source);
+  caller_task = g_task_new (conn, cancellable, callback, user_data);
+  g_task_set_priority (caller_task, io_priority);
+
+  begin_handshake (G_TLS_CONNECTION_GNUTLS (conn));
+
+  thread_task = g_task_new (conn, cancellable,
+                           handshake_thread_completed, caller_task);
+  g_task_set_priority (thread_task, io_priority);
+  g_task_run_in_thread (thread_task, async_handshake_thread);
+  g_object_unref (thread_task);
 }
 
 static gboolean
@@ -1011,82 +1435,53 @@ g_tls_connection_gnutls_handshake_finish (GTlsConnection       *conn,
                                          GAsyncResult         *result,
                                          GError              **error)
 {
-  GSimpleAsyncResult *simple;
+  g_return_val_if_fail (g_task_is_valid (result, conn), FALSE);
 
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (conn), g_tls_connection_gnutls_handshake_async), FALSE);
-
-  simple = G_SIMPLE_ASYNC_RESULT (result);
-
-  if (g_simple_async_result_propagate_error (simple, error))
-    return FALSE;
-
-  return g_simple_async_result_get_op_res_gboolean (simple);
+  return g_task_propagate_boolean (G_TASK (result), error);
 }
 
-/* #if ENABLE(TIZEN_NPN) */
-/* Following two functions MUST be declared.
- * Because glib2.0 already has following functions named set_next_protocols/get_next_protocol. */
-/*
-  available protocols as it is on Dec. 2012:
-    http/1.1
-    spdy/2
-    spdy/3
-*/
-#define __PROTOCOL_NAME_MAXLEN    8       /* http/1.1 */
-
-gboolean
-g_tls_connection_gnutls_is_npn_set (GTlsConnectionGnutls  *gnutls)
+static gboolean
+do_implicit_handshake (GTlsConnectionGnutls  *gnutls,
+                      gboolean               blocking,
+                      GCancellable          *cancellable,
+                      GError               **error)
 {
-#if ENABLE(TIZEN_NPN)
-       return gnutls->priv->is_npn_set;
-#else
-       return FALSE;
-#endif
-}
+  /* We have op_mutex */
 
-static void
-g_tls_connection_gnutls_set_next_protocols (GTlsConnectionGnutls  *gnutls,
-            const gchar           *protocols)
-{
-  g_return_if_fail (gnutls);
-  g_return_if_fail (protocols);
+  gnutls->priv->implicit_handshake = g_task_new (gnutls, cancellable, NULL, NULL);
 
-#if ENABLE(TIZEN_NPN)
-  gnutls->priv->is_npn_set = TRUE;
-  gnutls_negotiate_next_protocol (gnutls->priv->session, protocols, strlen(protocols));
-#endif
-}
+  begin_handshake (gnutls);
 
-static const gchar *
-g_tls_connection_gnutls_get_next_protocol (GTlsConnectionGnutls *gnutls)
-{
-#if ENABLE(TIZEN_NPN)
-  int gnutls_ret;
-  size_t size;
-  gchar buf[__PROTOCOL_NAME_MAXLEN];
-  gchar *ret_buf;
-  unsigned int supported;
-
-  g_return_val_if_fail (gnutls, NULL);
-
-  size = __PROTOCOL_NAME_MAXLEN;
-  gnutls_ret = gnutls_get_next_protocol (gnutls->priv->session, buf, &size, &supported);
-  if (!gnutls_ret)
-  {
-    ret_buf = g_new0 (gchar, size + 1);
-    memcpy (ret_buf, buf, size);
-
-    return ret_buf;
-  }
+  if (blocking)
+    {
+      GError *my_error = NULL;
+      gboolean success;
+
+      g_mutex_unlock (&gnutls->priv->op_mutex);
+      g_task_run_in_thread_sync (gnutls->priv->implicit_handshake,
+                                handshake_thread);
+      success = finish_handshake (gnutls,
+                                 gnutls->priv->implicit_handshake,
+                                 &my_error);
+      g_clear_object (&gnutls->priv->implicit_handshake);
+      yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_HANDSHAKE);
+      g_mutex_lock (&gnutls->priv->op_mutex);
+
+      if (my_error)
+       g_propagate_error (error, my_error);
+      return success;
+    }
   else
-  {
-    return NULL;
-  }
-#else
-  return NULL;
-#endif
+    {
+      g_task_run_in_thread (gnutls->priv->implicit_handshake,
+                           async_handshake_thread);
+
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK,
+                          _("Operation would block"));
+
+      return FALSE;
+    }
 }
-/* #endif */
 
 gssize
 g_tls_connection_gnutls_read (GTlsConnectionGnutls  *gnutls,
@@ -1098,13 +1493,27 @@ g_tls_connection_gnutls_read (GTlsConnectionGnutls  *gnutls,
 {
   gssize ret;
 
+  if (gnutls->priv->app_data_buf && !gnutls->priv->handshaking)
+    {
+      ret = MIN (count, gnutls->priv->app_data_buf->len);
+      memcpy (buffer, gnutls->priv->app_data_buf->data, ret);
+      if (ret == gnutls->priv->app_data_buf->len)
+       g_clear_pointer (&gnutls->priv->app_data_buf, g_byte_array_unref);
+      else
+       g_byte_array_remove_range (gnutls->priv->app_data_buf, 0, ret);
+      return ret;
+    }
+
  again:
-  if (handshake_in_progress_or_failed (gnutls, blocking, cancellable, error))
+  if (!claim_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_READ,
+                blocking, cancellable, error))
     return -1;
 
-  BEGIN_GNUTLS_IO (gnutls, blocking, cancellable);
+  BEGIN_GNUTLS_IO (gnutls, G_IO_IN, blocking, cancellable);
   ret = gnutls_record_recv (gnutls->priv->session, buffer, count);
-  END_GNUTLS_IO (gnutls, ret, _("Error reading data from TLS socket: %s"), error);
+  END_GNUTLS_IO (gnutls, G_IO_IN, ret, _("Error reading data from TLS socket: %s"), error);
+
+  yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_READ);
 
   if (ret >= 0)
     return ret;
@@ -1125,12 +1534,15 @@ g_tls_connection_gnutls_write (GTlsConnectionGnutls  *gnutls,
   gssize ret;
 
  again:
-  if (handshake_in_progress_or_failed (gnutls, blocking, cancellable, error))
+  if (!claim_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_WRITE,
+                blocking, cancellable, error))
     return -1;
 
-  BEGIN_GNUTLS_IO (gnutls, blocking, cancellable);
+  BEGIN_GNUTLS_IO (gnutls, G_IO_OUT, blocking, cancellable);
   ret = gnutls_record_send (gnutls->priv->session, buffer, count);
-  END_GNUTLS_IO (gnutls, ret, _("Error writing data to TLS socket: %s"), error);
+  END_GNUTLS_IO (gnutls, G_IO_OUT, ret, _("Error writing data to TLS socket: %s"), error);
+
+  yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_WRITE);
 
   if (ret >= 0)
     return ret;
@@ -1157,114 +1569,65 @@ g_tls_connection_gnutls_get_output_stream (GIOStream *stream)
 }
 
 static gboolean
-close_internal (GTlsConnectionGnutls  *gnutls,
-               gboolean               blocking,
-               GCancellable          *cancellable,
-               GError               **error)
-{
-  int ret;
-
-  /* If we haven't finished the initial handshake yet, there's no
-   * reason to finish it just so we can close.
-   */
-  if (!gnutls->priv->ever_handshaked)
-    return TRUE;
-
-  if (handshake_in_progress_or_failed (gnutls, blocking, cancellable, error))
-    return FALSE;
-
-  gnutls->priv->closing = TRUE;
-  BEGIN_GNUTLS_IO (gnutls, blocking, cancellable);
-  ret = gnutls_bye (gnutls->priv->session, GNUTLS_SHUT_WR);
-  END_GNUTLS_IO (gnutls, ret, _("Error performing TLS close: %s"), error);
-  if (ret == 0 || !error || !g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    gnutls->priv->closing = FALSE;
-
-  return ret == 0;
-}
-
-static gboolean
 g_tls_connection_gnutls_close (GIOStream     *stream,
                               GCancellable  *cancellable,
                               GError       **error)
 {
   GTlsConnectionGnutls *gnutls = G_TLS_CONNECTION_GNUTLS (stream);
+  gboolean success;
+  int ret = 0;
 
-  if (!close_internal (gnutls, TRUE, cancellable, error))
+  if (!claim_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_CLOSE,
+                TRUE, cancellable, error))
     return FALSE;
-  return g_io_stream_close (gnutls->priv->base_io_stream,
-                           cancellable, error);
-}
 
-typedef struct {
-  GSimpleAsyncResult *simple;
-  GCancellable *cancellable;
-  int io_priority;
-} AsyncCloseData;
+  if (gnutls->priv->closed)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                          _("Connection is already closed"));
+      yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_CLOSE);
+      return FALSE;
+    }
 
-static void
-close_base_stream_cb (GObject      *base_stream,
-                     GAsyncResult *result,
-                     gpointer      user_data)
-{
-  gboolean success;
-  GError *error = NULL;
-  AsyncCloseData *acd = user_data;
+  if (gnutls->priv->ever_handshaked)
+    {
+      BEGIN_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, TRUE, cancellable);
+      ret = gnutls_bye (gnutls->priv->session, GNUTLS_SHUT_WR);
+      END_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, ret,
+                    _("Error performing TLS close: %s"), error);
+    }
 
-  success = g_io_stream_close_finish (G_IO_STREAM (base_stream),
-                                     result, &error);
-  if (success)
-    g_simple_async_result_set_op_res_gboolean (acd->simple, TRUE);
-  else
+  gnutls->priv->closed = TRUE;
+
+  if (ret != 0)
     {
-      g_simple_async_result_set_from_error (acd->simple, error);
-      g_error_free (error);
+      yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_CLOSE);
+      return FALSE;
     }
 
-  g_simple_async_result_complete (acd->simple);
-  g_object_unref (acd->simple);
-  if (acd->cancellable)
-    g_object_unref (acd->cancellable);
-  g_slice_free (AsyncCloseData, acd);
+  success = g_io_stream_close (gnutls->priv->base_io_stream,
+                              cancellable, error);
+  yield_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_CLOSE);
+  return success;
 }
 
-static gboolean
-g_tls_connection_gnutls_close_ready (GObject  *pollable_stream,
-                                    gpointer  user_data)
+/* We do async close as synchronous-in-a-thread so we don't need to
+ * implement G_IO_IN/G_IO_OUT flip-flopping just for this one case
+ * (since handshakes are also done synchronously now).
+ */
+static void
+close_thread (GTask        *task,
+             gpointer      object,
+             gpointer      task_data,
+             GCancellable *cancellable)
 {
-  GTlsConnectionGnutls *gnutls;
-  AsyncCloseData *acd = user_data;
-  gboolean success;
+  GIOStream *stream = object;
   GError *error = NULL;
 
-  gnutls = G_TLS_CONNECTION_GNUTLS (g_async_result_get_source_object (G_ASYNC_RESULT (acd->simple)));
-  g_object_unref (gnutls);
-
-  success = close_internal (gnutls, FALSE, NULL, &error);
-  if (!success && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      g_error_free (error);
-      return TRUE;
-    }
-
-  if (error)
-    {
-      g_simple_async_result_set_from_error (acd->simple, error);
-      g_simple_async_result_complete (acd->simple);
-      g_error_free (error);
-      g_object_unref (acd->simple);
-      if (acd->cancellable)
-       g_object_unref (acd->cancellable);
-      g_slice_free (AsyncCloseData, acd);
-    }
+  if (!g_tls_connection_gnutls_close (stream, cancellable, &error))
+    g_task_return_error (task, error);
   else
-    {
-      g_io_stream_close_async (gnutls->priv->base_io_stream,
-                              acd->io_priority, acd->cancellable,
-                              close_base_stream_cb, acd);
-    }
-
-  return FALSE;
+    g_task_return_boolean (task, TRUE);
 }
 
 static void
@@ -1274,48 +1637,12 @@ g_tls_connection_gnutls_close_async (GIOStream           *stream,
                                     GAsyncReadyCallback  callback,
                                     gpointer             user_data)
 {
-  GTlsConnectionGnutls *gnutls = G_TLS_CONNECTION_GNUTLS (stream);
-  GSimpleAsyncResult *simple;
-  gboolean success;
-  GError *error = NULL;
-  AsyncCloseData *acd;
-  GSource *source;
-
-  simple = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
-                                     g_tls_connection_gnutls_close_async);
-
-  success = close_internal (gnutls, FALSE, cancellable, &error);
-  if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-    }
+  GTask *task;
 
-  if (error)
-    g_error_free (error);
-
-  acd = g_slice_new (AsyncCloseData);
-  acd->simple = simple;
-  acd->cancellable = cancellable ? g_object_ref (cancellable) : cancellable;
-  acd->io_priority = io_priority;
-
-  if (success)
-    {
-      g_io_stream_close_async (gnutls->priv->base_io_stream,
-                              io_priority, cancellable,
-                              close_base_stream_cb, acd);
-      return;
-    }
-
-  source = g_tls_connection_gnutls_create_source (gnutls, 0, acd->cancellable);
-  g_source_set_callback (source,
-                        (GSourceFunc) g_tls_connection_gnutls_close_ready,
-                        acd, NULL);
-  g_source_set_priority (source, acd->io_priority);
-  g_source_attach (source, g_main_context_get_thread_default ());
-  g_source_unref (source);
+  task = g_task_new (stream, cancellable, callback, user_data);
+  g_task_set_priority (task, io_priority);
+  g_task_run_in_thread (task, close_thread);
+  g_object_unref (task);
 }
 
 static gboolean
@@ -1323,16 +1650,9 @@ g_tls_connection_gnutls_close_finish (GIOStream           *stream,
                                      GAsyncResult        *result,
                                      GError             **error)
 {
-  GSimpleAsyncResult *simple;
+  g_return_val_if_fail (g_task_is_valid (result, stream), FALSE);
 
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (stream), g_tls_connection_gnutls_close_async), FALSE);
-
-  simple = G_SIMPLE_ASYNC_RESULT (result);
-
-  if (g_simple_async_result_propagate_error (simple, error))
-    return FALSE;
-
-  return g_simple_async_result_get_op_res_gboolean (simple);
+  return g_task_propagate_boolean (G_TASK (result), error);
 }
 
 #ifdef HAVE_PKCS11
@@ -1404,12 +1724,6 @@ g_tls_connection_gnutls_class_init (GTlsConnectionGnutlsClass *klass)
   connection_class->handshake_async  = g_tls_connection_gnutls_handshake_async;
   connection_class->handshake_finish = g_tls_connection_gnutls_handshake_finish;
 
-  /* #if ENABLE(TIZEN_NPN) */
-  /* This code MUST be set because glib2.0 already has following functions named set_next_protocols/get_next_protocol. */
-  connection_class->set_next_protocols  = g_tls_connection_gnutls_set_next_protocols;
-  connection_class->get_next_protocol   = g_tls_connection_gnutls_get_next_protocol;
-  /* #endif */
-
   iostream_class->get_input_stream  = g_tls_connection_gnutls_get_input_stream;
   iostream_class->get_output_stream = g_tls_connection_gnutls_get_output_stream;
   iostream_class->close_fn          = g_tls_connection_gnutls_close;
index 7fd2cd9..3aa8473 100644 (file)
@@ -36,11 +36,7 @@ struct _GTlsConnectionGnutlsClass
   void     (*failed)           (GTlsConnectionGnutls  *gnutls);
 
   void     (*begin_handshake)  (GTlsConnectionGnutls  *gnutls);
-  gboolean (*verify_peer)      (GTlsConnectionGnutls  *gnutls,
-                               GTlsCertificate       *peer_certificate,
-                               GTlsCertificateFlags  *errors);
   void     (*finish_handshake) (GTlsConnectionGnutls  *gnutls,
-                               gboolean               success,
                                GError               **inout_error);
 };
 
@@ -52,9 +48,9 @@ struct _GTlsConnectionGnutls
 
 GType g_tls_connection_gnutls_get_type (void) G_GNUC_CONST;
 
-gnutls_certificate_credentials g_tls_connection_gnutls_get_credentials (GTlsConnectionGnutls *connection);
-gnutls_session                 g_tls_connection_gnutls_get_session     (GTlsConnectionGnutls *connection);
-void                           g_tls_connection_gnutls_get_certificate (GTlsConnectionGnutls *gnutls,
+gnutls_certificate_credentials_t g_tls_connection_gnutls_get_credentials (GTlsConnectionGnutls *connection);
+gnutls_session_t                 g_tls_connection_gnutls_get_session     (GTlsConnectionGnutls *connection);
+void                             g_tls_connection_gnutls_get_certificate (GTlsConnectionGnutls *gnutls,
                                                                         gnutls_retr2_st      *st);
 
 gssize   g_tls_connection_gnutls_read          (GTlsConnectionGnutls  *gnutls,
@@ -76,10 +72,6 @@ GSource *g_tls_connection_gnutls_create_source (GTlsConnectionGnutls  *gnutls,
                                                GIOCondition           condition,
                                                GCancellable          *cancellable);
 
-//#if ENABLE(TIZEN_NPN)
-gboolean g_tls_connection_gnutls_is_npn_set         (GTlsConnectionGnutls  *gnutls);
-//#endif
-
 G_END_DECLS
 
 #endif /* __G_TLS_CONNECTION_GNUTLS_H___ */
old mode 100644 (file)
new mode 100755 (executable)
index c06c5d0..abde47f
@@ -29,6 +29,7 @@
 #include "gtlscertificate-gnutls.h"
 
 #include <glib/gi18n-lib.h>
+#include "TIZEN.h"
 
 G_DEFINE_ABSTRACT_TYPE (GTlsDatabaseGnutls, g_tls_database_gnutls, G_TYPE_TLS_DATABASE);
 
@@ -66,7 +67,9 @@ build_certificate_chain (GTlsDatabaseGnutls      *self,
 {
 
   GTlsCertificateGnutls *certificate;
+  GTlsCertificateGnutls *previous;
   GTlsCertificate *issuer;
+  gboolean certificate_is_from_db;
 
   g_assert (anchor);
   g_assert (chain);
@@ -81,7 +84,9 @@ build_certificate_chain (GTlsDatabaseGnutls      *self,
    */
 
   *anchor = NULL;
+  previous = NULL;
   certificate = chain;
+  certificate_is_from_db = FALSE;
 
   /* First check for pinned certificate */
   if (g_tls_database_gnutls_lookup_assertion (self, certificate,
@@ -118,15 +123,45 @@ build_certificate_chain (GTlsDatabaseGnutls      *self,
       /* Is it self-signed? */
       if (is_self_signed (certificate))
         {
+          /*
+           * Since at this point we would fail with 'self-signed', can we replace
+           * this certificate with one from the database and do better?
+           */
+          if (previous && !certificate_is_from_db)
+            {
+              issuer = g_tls_database_lookup_certificate_issuer (G_TLS_DATABASE (self),
+                                                                 G_TLS_CERTIFICATE (previous),
+                                                                 interaction,
+                                                                 G_TLS_DATABASE_LOOKUP_NONE,
+                                                                 cancellable, error);
+              if (*error)
+                {
+                  return STATUS_FAILURE;
+                }
+              else if (issuer)
+                {
+                  /* Replaced with certificate in the db, restart step again with this certificate */
+                  g_return_val_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (issuer), STATUS_FAILURE);
+                  g_tls_certificate_gnutls_set_issuer (previous, G_TLS_CERTIFICATE_GNUTLS (issuer));
+                  certificate = G_TLS_CERTIFICATE_GNUTLS (issuer);
+                  certificate_is_from_db = TRUE;
+                  continue;
+                }
+            }
+
           g_tls_certificate_gnutls_set_issuer (certificate, NULL);
           return STATUS_SELFSIGNED;
         }
 
+      previous = certificate;
+
       /* Bring over the next certificate in the chain */
       issuer = g_tls_certificate_get_issuer (G_TLS_CERTIFICATE (certificate));
       if (issuer)
         {
           g_return_val_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (issuer), STATUS_FAILURE);
+          certificate = G_TLS_CERTIFICATE_GNUTLS (issuer);
+          certificate_is_from_db = FALSE;
         }
 
       /* Search for the next certificate in chain */
@@ -141,13 +176,14 @@ build_certificate_chain (GTlsDatabaseGnutls      *self,
             return STATUS_FAILURE;
           else if (!issuer)
             return STATUS_INCOMPLETE;
+
+          /* Found a certificate in chain, use for next step */
           g_return_val_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (issuer), STATUS_FAILURE);
           g_tls_certificate_gnutls_set_issuer (certificate, G_TLS_CERTIFICATE_GNUTLS (issuer));
+          certificate = G_TLS_CERTIFICATE_GNUTLS (issuer);
+          certificate_is_from_db = TRUE;
           g_object_unref (issuer);
         }
-
-      g_assert (issuer);
-      certificate = G_TLS_CERTIFICATE_GNUTLS (issuer);
     }
 
   g_assert_not_reached ();
@@ -159,16 +195,41 @@ double_check_before_after_dates (GTlsCertificateGnutls *chain)
   GTlsCertificateFlags gtls_flags = 0;
   gnutls_x509_crt_t cert;
   time_t t, now;
+#if ENABLE(TIZEN_TV_DLOG)
+  char timebuf[256];
+#endif
 
   now = time (NULL);
   while (chain)
     {
       cert = g_tls_certificate_gnutls_get_cert (chain);
       t = gnutls_x509_crt_get_activation_time (cert);
+
+#if ENABLE(TIZEN_TV_DLOG)
+      ctime_r(&now, timebuf);
+      TIZEN_LOGI("[Certificate] TV borad time is: %s", timebuf);
+      if (t != (time_t) -1) {
+       ctime_r(&t, timebuf);
+        TIZEN_LOGI("[Certificate] CA activation time is: %s", timebuf);
+      }
+      else
+        TIZEN_LOGI("[Certificate] gnutls_x509_crt_get_activation_time ERROR");
+#endif
+
       if (t == (time_t) -1 || t > now)
         gtls_flags |= G_TLS_CERTIFICATE_NOT_ACTIVATED;
 
       t = gnutls_x509_crt_get_expiration_time (cert);
+
+#if ENABLE(TIZEN_TV_DLOG)
+      if (t != (time_t) -1) {
+       ctime_r(&t, timebuf);
+        TIZEN_LOGI("[Certificate] CA expiration time is: %s", timebuf);
+      }
+      else
+        TIZEN_LOGI("[Certificate] gnutls_x509_crt_get_expiration_time ERROR");
+#endif
+
       if (t == (time_t) -1 || t < now)
         gtls_flags |= G_TLS_CERTIFICATE_EXPIRED;
 
old mode 100644 (file)
new mode 100755 (executable)
index 49ce6d2..280fc1f
 #include <glib/gi18n-lib.h>
 #include <gnutls/x509.h>
 
+#include <TIZEN.h>
+
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+#include <dirent.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#endif
 static void g_tls_file_database_gnutls_file_database_interface_init (GTlsFileDatabaseInterface *iface);
 
 static void g_tls_file_database_gnutls_initable_interface_init (GInitableIface *iface);
@@ -53,7 +60,7 @@ struct _GTlsFileDatabaseGnutlsPrivate
   GMutex mutex;
 
   /*
-   * These are hash tables of GByteArray -> GPtrArray<GByteArray>. The values of
+   * These are hash tables of GBytes -> GPtrArray<GBytes>. The values of
    * the ptr array are full DER encoded certificate values. The keys are byte
    * arrays containing either subject DNs, issuer DNs, or full DER encoded certs
    */
@@ -61,84 +68,46 @@ struct _GTlsFileDatabaseGnutlsPrivate
   GHashTable *issuers;
 
   /*
-   * This is a table of GByteArray -> GByteArray. The values and keys are
+   * This is a table of GBytes -> GBytes. The values and keys are
    * DER encoded certificate values.
    */
   GHashTable *complete;
 
   /*
-   * This is a table of gchar * -> GPtrArray<GByteArray>. The values of
+   * This is a table of gchar * -> GPtrArray<GBytes>. The values of
    * the ptr array are full DER encoded certificate values. The keys are the
    * string handles. This array is populated on demand.
    */
   GHashTable *handles;
 };
 
-static guint
-byte_array_hash (gconstpointer v)
-{
-  const GByteArray *array = v;
-  const signed char *p;
-  guint32 h = 0;
-  gsize i;
-
-  g_assert (array);
-  g_assert (array->data);
-  p = (signed char*)array->data;
-
-  /* 31 bit hash function */
-  for (i = 0; i < array->len; ++i, ++p)
-    h = (h << 5) - h + *p;
-
-  return h;
-}
-
-static gboolean
-byte_array_equal (gconstpointer v1, gconstpointer v2)
-{
-  const GByteArray *array1 = v1;
-  const GByteArray *array2 = v2;
-
-  if (array1 == array2)
-    return TRUE;
-  if (!array1 || !array2)
-    return FALSE;
-
-  if (array1->len != array2->len)
-    return FALSE;
-
-  if (array1->data == array2->data)
-    return TRUE;
-  if (!array1->data || !array2->data)
-    return FALSE;
-
-  return (memcmp (array1->data, array2->data, array1->len) == 0) ? TRUE : FALSE;
-}
-
 static GHashTable *
-multi_byte_array_hash_new (void)
+bytes_multi_table_new (void)
 {
-  return g_hash_table_new_full (byte_array_hash, byte_array_equal,
-                                (GDestroyNotify)g_byte_array_unref,
+  return g_hash_table_new_full (g_bytes_hash, g_bytes_equal,
+                                (GDestroyNotify)g_bytes_unref,
                                 (GDestroyNotify)g_ptr_array_unref);
 }
 
 static void
-multi_byte_array_hash_insert (GHashTable *table, GByteArray *key, GByteArray *value)
+bytes_multi_table_insert (GHashTable *table,
+                          GBytes     *key,
+                          GBytes     *value)
 {
   GPtrArray *multi;
 
   multi = g_hash_table_lookup (table, key);
   if (multi == NULL)
     {
-      multi = g_ptr_array_new_with_free_func ((GDestroyNotify)g_byte_array_unref);
-      g_hash_table_insert (table, g_byte_array_ref (key), multi);
+      multi = g_ptr_array_new_with_free_func ((GDestroyNotify)g_bytes_unref);
+      g_hash_table_insert (table, g_bytes_ref (key), multi);
     }
-  g_ptr_array_add (multi, g_byte_array_ref (value));
+  g_ptr_array_add (multi, g_bytes_ref (value));
 }
 
-static GByteArray *
-multi_byte_array_hash_lookup_one (GHashTable *table, GByteArray *key)
+static GBytes *
+bytes_multi_table_lookup_ref_one (GHashTable *table,
+                                  GBytes     *key)
 {
   GPtrArray *multi;
 
@@ -147,18 +116,30 @@ multi_byte_array_hash_lookup_one (GHashTable *table, GByteArray *key)
     return NULL;
 
   g_assert (multi->len > 0);
-  return multi->pdata[0];
+  return g_bytes_ref (multi->pdata[0]);
 }
 
-static GPtrArray *
-multi_byte_array_hash_lookup_all (GHashTable *table, GByteArray *key)
+static GList *
+bytes_multi_table_lookup_ref_all (GHashTable *table,
+                                  GBytes     *key)
 {
-  return g_hash_table_lookup (table, key);
+  GPtrArray *multi;
+  GList *list = NULL;
+  gint i;
+
+  multi = g_hash_table_lookup (table, key);
+  if (multi == NULL)
+    return NULL;
+
+  for (i = 0; i < multi->len; i++)
+    list = g_list_prepend (list, g_bytes_ref (multi->pdata[i]));
+
+  return g_list_reverse (list);
 }
 
 static gchar *
 create_handle_for_certificate (const gchar *filename,
-                               GByteArray  *der)
+                               GBytes      *der)
 {
   gchar *bookmark;
   gchar *uri_part;
@@ -173,8 +154,7 @@ create_handle_for_certificate (const gchar *filename,
   if (!uri_part)
     return NULL;
 
-  bookmark = g_compute_checksum_for_data (G_CHECKSUM_SHA256,
-                                          der->data, der->len);
+  bookmark = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, der);
   uri = g_strconcat (uri_part, "#", bookmark, NULL);
 
   g_free (bookmark);
@@ -189,18 +169,18 @@ create_handles_array_unlocked (const gchar *filename,
 {
   GHashTable *handles;
   GHashTableIter iter;
-  GByteArray *der;
+  GBytes *der;
   gchar *handle;
 
   handles = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
-                                   (GDestroyNotify)g_byte_array_unref);
+                                   (GDestroyNotify)g_bytes_unref);
 
   g_hash_table_iter_init (&iter, complete);
   while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&der))
     {
       handle = create_handle_for_certificate (filename, der);
       if (handle != NULL)
-        g_hash_table_insert (handles, handle, g_byte_array_ref (der));
+        g_hash_table_insert (handles, handle, g_bytes_ref (der));
     }
 
   return handles;
@@ -216,9 +196,9 @@ load_anchor_file (const gchar *filename,
   GList *list, *l;
   gnutls_x509_crt_t cert;
   gnutls_datum_t dn;
-  GByteArray *der;
-  GByteArray *subject;
-  GByteArray *issuer;
+  GBytes *der;
+  GBytes *subject;
+  GBytes *issuer;
   gint gerr;
   GError *my_error = NULL;
 
@@ -226,6 +206,10 @@ load_anchor_file (const gchar *filename,
   if (my_error)
     {
       g_propagate_error (error, my_error);
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+      if ((error != NULL) && (*error != my_error))
+        g_error_free (my_error);
+#endif
       return FALSE;
     }
 
@@ -240,9 +224,7 @@ load_anchor_file (const gchar *filename,
           continue;
         }
 
-      subject = g_byte_array_new ();
-      g_byte_array_append (subject, dn.data, dn.size);
-      gnutls_free (dn.data);
+      subject = g_bytes_new_with_free_func (dn.data, dn.size, gnutls_free, dn.data);
 
       gerr = gnutls_x509_crt_get_raw_issuer_dn (cert, &dn);
       if (gerr < 0)
@@ -252,25 +234,21 @@ load_anchor_file (const gchar *filename,
           continue;
         }
 
-      issuer = g_byte_array_new ();
-      g_byte_array_append (issuer, dn.data, dn.size);
-      gnutls_free (dn.data);
+      issuer = g_bytes_new_with_free_func (dn.data, dn.size, gnutls_free, dn.data);
 
-      /* Dig out the full value of this certificate's DER encoding */
-      der = NULL;
-      g_object_get (l->data, "certificate", &der, NULL);
-      g_return_val_if_fail (der, FALSE);
+      der = g_tls_certificate_gnutls_get_bytes (l->data);
+      g_return_val_if_fail (der != NULL, FALSE);
 
       /* Three different ways of looking up same certificate */
-      multi_byte_array_hash_insert (subjects, subject, der);
-      multi_byte_array_hash_insert (issuers, issuer, der);
+      bytes_multi_table_insert (subjects, subject, der);
+      bytes_multi_table_insert (issuers, issuer, der);
 
-      g_hash_table_insert (complete, g_byte_array_ref (der),
-                           g_byte_array_ref (der));
+      g_hash_table_insert (complete, g_bytes_ref (der),
+                           g_bytes_ref (der));
 
-      g_byte_array_unref (der);
-      g_byte_array_unref (subject);
-      g_byte_array_unref (issuer);
+      g_bytes_unref (der);
+      g_bytes_unref (subject);
+      g_bytes_unref (issuer);
 
       g_object_unref (l->data);
     }
@@ -280,6 +258,45 @@ load_anchor_file (const gchar *filename,
 }
 
 
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+static gboolean
+traverse_load_anchor_file (const gchar *filename,
+                           GHashTable  *subjects,
+                           GHashTable  *issuers,
+                           GHashTable  *complete,
+                           GError     **error)
+{
+  struct stat buf;
+  gboolean result = FALSE;
+  if (!stat(filename, &buf))
+    {
+      if (S_ISREG(buf.st_mode))
+          result = load_anchor_file (filename, subjects, issuers, complete, error);
+      else if (S_ISDIR(buf.st_mode))
+        {
+          DIR* pDir = opendir(filename);
+          if (pDir != NULL)
+            {
+             struct dirent dent;
+              struct dirent* dentp;
+              char *stFileName;
+              while (((readdir_r(pDir, &dent, &dentp)) == 0) && dentp)
+                {
+                  if (!g_ascii_strcasecmp(dentp->d_name, ".") || !g_ascii_strcasecmp(dentp->d_name, ".."))
+                      continue;
+
+                  stFileName = g_strconcat (filename, "/", dentp->d_name, NULL);
+                  if (stFileName && !stat(stFileName, &buf) && S_ISREG(buf.st_mode))
+                      result = load_anchor_file (stFileName, subjects, issuers, complete, error);
+                  g_free (stFileName);
+                }
+              closedir(pDir);
+            }
+        }
+    }
+  return result;
+}
+#endif
 
 static void
 g_tls_file_database_gnutls_finalize (GObject *object)
@@ -370,12 +387,12 @@ g_tls_file_database_gnutls_create_certificate_handle (GTlsDatabase            *d
                                                       GTlsCertificate         *certificate)
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (database);
-  GByteArray *der;
+  GBytes *der;
   gboolean contains;
   gchar *handle = NULL;
 
-  g_object_get (certificate, "certificate", &der, NULL);
-  g_return_val_if_fail (der, FALSE);
+  der = g_tls_certificate_gnutls_get_bytes (G_TLS_CERTIFICATE_GNUTLS (certificate));
+  g_return_val_if_fail (der != NULL, FALSE);
 
   g_mutex_lock (&self->priv->mutex);
 
@@ -388,7 +405,7 @@ g_tls_file_database_gnutls_create_certificate_handle (GTlsDatabase            *d
   if (contains)
     handle = create_handle_for_certificate (self->priv->anchor_filename, der);
 
-  g_byte_array_unref (der);
+  g_bytes_unref (der);
   return handle;
 }
 
@@ -401,8 +418,10 @@ g_tls_file_database_gnutls_lookup_certificate_for_handle (GTlsDatabase
                                                           GError                 **error)
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (database);
-  GByteArray *der;
+  GTlsCertificate *cert;
+  GBytes *der;
   gnutls_datum_t datum;
+  gsize length;
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return NULL;
@@ -418,19 +437,24 @@ g_tls_file_database_gnutls_lookup_certificate_for_handle (GTlsDatabase
                                                          self->priv->complete);
 
     der = g_hash_table_lookup (self->priv->handles, handle);
+    if (der != NULL)
+      g_bytes_ref (der);
 
   g_mutex_unlock (&self->priv->mutex);
 
   if (der == NULL)
     return NULL;
 
-  datum.data = der->data;
-  datum.size = der->len;
+  datum.data = (unsigned char *)g_bytes_get_data (der, &length);
+  datum.size = length;
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
-    return NULL;
+    cert = NULL;
+  else
+    cert = g_tls_certificate_gnutls_new (&datum, NULL);
 
-  return g_tls_certificate_gnutls_new (&datum, NULL);
+  g_bytes_unref (der);
+  return cert;
 }
 
 static gboolean
@@ -443,7 +467,7 @@ g_tls_file_database_gnutls_lookup_assertion (GTlsDatabaseGnutls          *databa
                                              GError                     **error)
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (database);
-  GByteArray *der = NULL;
+  GBytes *der = NULL;
   gboolean contains;
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
@@ -458,14 +482,13 @@ g_tls_file_database_gnutls_lookup_assertion (GTlsDatabaseGnutls          *databa
    * comparing them to the purpose.
    */
 
-  g_object_get (certificate, "certificate", &der, NULL);
-  g_return_val_if_fail (der, FALSE);
+  der = g_tls_certificate_gnutls_get_bytes (certificate);
 
   g_mutex_lock (&self->priv->mutex);
   contains = g_hash_table_lookup (self->priv->complete, der) ? TRUE : FALSE;
   g_mutex_unlock (&self->priv->mutex);
 
-  g_byte_array_unref (der);
+  g_bytes_unref (der);
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return FALSE;
@@ -484,10 +507,11 @@ g_tls_file_database_gnutls_lookup_certificate_issuer (GTlsDatabase           *da
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (database);
   gnutls_datum_t dn = { NULL, 0 };
-  GByteArray *subject, *der;
+  GBytes *subject, *der;
   gnutls_datum_t datum;
   GTlsCertificate *issuer = NULL;
   gnutls_x509_crt_t cert;
+  gsize length;
   int gerr;
 
   g_return_val_if_fail (G_IS_TLS_CERTIFICATE_GNUTLS (certificate), NULL);
@@ -507,27 +531,28 @@ g_tls_file_database_gnutls_lookup_certificate_issuer (GTlsDatabase           *da
       return NULL;
     }
 
-  subject = g_byte_array_new ();
-  g_byte_array_append (subject, dn.data, dn.size);
-  gnutls_free (dn.data);
+  subject = g_bytes_new_with_free_func (dn.data, dn.size, gnutls_free, dn.data);
 
   /* Find the full DER value of the certificate */
   g_mutex_lock (&self->priv->mutex);
-  der = multi_byte_array_hash_lookup_one (self->priv->subjects, subject);
+  der = bytes_multi_table_lookup_ref_one (self->priv->subjects, subject);
   g_mutex_unlock (&self->priv->mutex);
 
-  g_byte_array_unref (subject);
+  g_bytes_unref (subject);
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
-    return NULL;
-
-  if (der != NULL)
     {
-      datum.data = der->data;
-      datum.size = der->len;
+      issuer = NULL;
+    }
+  else if (der != NULL)
+    {
+      datum.data = (unsigned char *)g_bytes_get_data (der, &length);
+      datum.size = length;
       issuer = g_tls_certificate_gnutls_new (&datum, NULL);
     }
 
+  if (der != NULL)
+    g_bytes_unref (der);
   return issuer;
 }
 
@@ -540,12 +565,12 @@ g_tls_file_database_gnutls_lookup_certificates_issued_by (GTlsDatabase
                                                           GError                **error)
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (database);
-  GByteArray *der;
+  GBytes *issuer;
   gnutls_datum_t datum;
   GList *issued = NULL;
-  GPtrArray *ders;
+  GList *ders;
+  gsize length;
   GList *l;
-  guint i;
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return NULL;
@@ -554,28 +579,30 @@ g_tls_file_database_gnutls_lookup_certificates_issued_by (GTlsDatabase
   if (flags & G_TLS_DATABASE_LOOKUP_KEYPAIR)
     return NULL;
 
+  issuer = g_bytes_new_static (issuer_raw_dn->data, issuer_raw_dn->len);
+
   /* Find the full DER value of the certificate */
   g_mutex_lock (&self->priv->mutex);
-  ders = multi_byte_array_hash_lookup_all (self->priv->issuers, issuer_raw_dn);
+  ders = bytes_multi_table_lookup_ref_all (self->priv->issuers, issuer);
   g_mutex_unlock (&self->priv->mutex);
 
-  for (i = 0; ders && i < ders->len; i++)
+  g_bytes_unref (issuer);
+
+  for (l = ders; l != NULL; l = g_list_next (l))
     {
       if (g_cancellable_set_error_if_cancelled (cancellable, error))
         {
-          for (l = issued; l != NULL; l = l->next)
-            g_object_unref (l->data);
-          g_list_free (issued);
+          g_list_free_full (issued, g_object_unref);
           issued = NULL;
           break;
         }
 
-      der = ders->pdata[i];
-      datum.data = der->data;
-      datum.size = der->len;
+      datum.data = (unsigned char *)g_bytes_get_data (l->data, &length);
+      datum.size = length;
       issued = g_list_prepend (issued, g_tls_certificate_gnutls_new (&datum, NULL));
     }
 
+  g_list_free_full (ders, (GDestroyNotify)g_bytes_unref);
   return issued;
 }
 
@@ -614,20 +641,50 @@ g_tls_file_database_gnutls_initable_init (GInitable    *initable,
 {
   GTlsFileDatabaseGnutls *self = G_TLS_FILE_DATABASE_GNUTLS (initable);
   GHashTable *subjects, *issuers, *complete;
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+  gboolean result = FALSE;
+#else
   gboolean result;
+#endif
 
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+  gboolean mutiple_certicate_result = FALSE;
+#endif
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return FALSE;
 
-  subjects = multi_byte_array_hash_new ();
-  issuers = multi_byte_array_hash_new ();
+  subjects = bytes_multi_table_new ();
+  issuers = bytes_multi_table_new ();
 
-  complete = g_hash_table_new_full (byte_array_hash, byte_array_equal,
-                                    (GDestroyNotify)g_byte_array_unref,
-                                    (GDestroyNotify)g_byte_array_unref);
+  complete = g_hash_table_new_full (g_bytes_hash, g_bytes_equal,
+                                    (GDestroyNotify)g_bytes_unref,
+                                    (GDestroyNotify)g_bytes_unref);
 
+#if ENABLE(TIZEN_TV_MULTIPLE_CERTIFICATE)
+  if (self->priv->anchor_filename)
+    {
+      gchar **paths = g_strsplit (self->priv->anchor_filename, ":", 0);
+      gint i;
+      for (i = 0; paths[i]; i++)
+        {
+          mutiple_certicate_result = traverse_load_anchor_file (paths[i], subjects, issuers, complete, error);
+          if (mutiple_certicate_result == TRUE)
+            result = TRUE;
+        }
+      if((*error == NULL) && (result == FALSE))
+        *error = g_error_new (G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                         _("Invalid byte sequence in conversion input"));
+      if((*error != NULL) && (result == TRUE))
+        g_error_free(*error);
+      g_strfreev(paths);
+    }
+  else
+   *error = g_error_new (G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                         _("Invalid byte sequence in conversion input"));
+#else
   result = load_anchor_file (self->priv->anchor_filename, subjects, issuers,
                              complete, error);
+#endif
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     result = FALSE;
index c081283..e102775 100644 (file)
@@ -29,11 +29,6 @@ G_DEFINE_TYPE_WITH_CODE (GTlsInputStreamGnutls, g_tls_input_stream_gnutls, G_TYP
 struct _GTlsInputStreamGnutlsPrivate
 {
   GTlsConnectionGnutls *conn;
-
-  /* pending operation metadata */
-  GCancellable *cancellable;
-  gpointer buffer;
-  gsize count;
 };
 
 static void
@@ -68,112 +63,6 @@ g_tls_input_stream_gnutls_read (GInputStream  *stream,
 }
 
 static gboolean
-g_tls_input_stream_gnutls_read_ready (GPollableInputStream *stream,
-                                     gpointer              user_data)
-{
-  GTlsInputStreamGnutls *tls_stream;
-  GSimpleAsyncResult *simple = user_data;
-  gssize nread;
-  GError *error = NULL;
-
-  tls_stream = G_TLS_INPUT_STREAM_GNUTLS (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
-  g_object_unref (tls_stream);
-
-  nread = g_tls_connection_gnutls_read (tls_stream->priv->conn,
-                                       tls_stream->priv->buffer,
-                                       tls_stream->priv->count, FALSE,
-                                       tls_stream->priv->cancellable,
-                                       &error);
-  if (nread == -1 &&
-      g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      g_error_free (error);
-      return TRUE;
-    }
-
-  if (error)
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-    }
-  else
-    g_simple_async_result_set_op_res_gssize (simple, nread);
-
-  if (tls_stream->priv->cancellable)
-    g_object_unref (tls_stream->priv->cancellable);
-  g_simple_async_result_complete (simple);
-  g_object_unref (simple);
-
-  return FALSE;
-}
-
-static void
-g_tls_input_stream_gnutls_read_async (GInputStream        *stream,
-                                     void                *buffer,
-                                     gsize                count,
-                                     gint                 io_priority,
-                                     GCancellable        *cancellable,
-                                     GAsyncReadyCallback  callback,
-                                     gpointer             user_data)
-{
-  GTlsInputStreamGnutls *tls_stream = G_TLS_INPUT_STREAM_GNUTLS (stream);
-  GSimpleAsyncResult *simple;
-  gssize nread;
-  GError *error = NULL;
-  GSource *source;
-
-  g_return_if_fail (tls_stream->priv->conn != NULL);
-
-  simple = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
-                                     g_tls_input_stream_gnutls_read_async);
-  nread = g_tls_connection_gnutls_read (tls_stream->priv->conn,
-                                       buffer, count, FALSE,
-                                       cancellable, &error);
-
-  if (nread >= 0 ||
-      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      if (error)
-       {
-         g_simple_async_result_set_from_error (simple, error);
-         g_error_free (error);
-       }
-      else
-       g_simple_async_result_set_op_res_gssize (simple, nread);
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-      return;
-    }
-
-  if (error)
-    g_error_free (error);
-
-  tls_stream->priv->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
-  tls_stream->priv->buffer = buffer;
-  tls_stream->priv->count = count;
-
-  source = g_tls_connection_gnutls_create_source (tls_stream->priv->conn,
-                                                 G_IO_IN,
-                                                 tls_stream->priv->cancellable);
-  g_source_set_callback (source,
-                        (GSourceFunc) g_tls_input_stream_gnutls_read_ready,
-                        simple, NULL);
-  g_source_attach (source, g_main_context_get_thread_default ());
-  g_source_unref (source);
-}
-
-static gssize
-g_tls_input_stream_gnutls_read_finish (GInputStream  *stream,
-                                      GAsyncResult  *result,
-                                      GError       **error)
-{
-  g_return_val_if_fail (G_IS_TLS_INPUT_STREAM_GNUTLS (stream), -1);
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (stream), g_tls_input_stream_gnutls_read_async), -1);
-
-  return g_simple_async_result_get_op_res_gssize (G_SIMPLE_ASYNC_RESULT (result));
-}
-
-static gboolean
 g_tls_input_stream_gnutls_pollable_is_readable (GPollableInputStream *pollable)
 {
   GTlsInputStreamGnutls *tls_stream = G_TLS_INPUT_STREAM_GNUTLS (pollable);
@@ -220,8 +109,6 @@ g_tls_input_stream_gnutls_class_init (GTlsInputStreamGnutlsClass *klass)
   gobject_class->dispose = g_tls_input_stream_gnutls_dispose;
 
   input_stream_class->read_fn = g_tls_input_stream_gnutls_read;
-  input_stream_class->read_async = g_tls_input_stream_gnutls_read_async;
-  input_stream_class->read_finish = g_tls_input_stream_gnutls_read_finish;
 }
 
 static void
index ccd5ca5..76bd09d 100644 (file)
@@ -29,11 +29,6 @@ G_DEFINE_TYPE_WITH_CODE (GTlsOutputStreamGnutls, g_tls_output_stream_gnutls, G_T
 struct _GTlsOutputStreamGnutlsPrivate
 {
   GTlsConnectionGnutls *conn;
-
-  /* pending operation metadata */
-  GCancellable *cancellable;
-  gconstpointer buffer;
-  gsize count;
 };
 
 static void
@@ -68,112 +63,6 @@ g_tls_output_stream_gnutls_write (GOutputStream  *stream,
 }
 
 static gboolean
-g_tls_output_stream_gnutls_write_ready (GIOStreamAdapter *adapter,
-                                       gpointer          user_data)
-{
-  GTlsOutputStreamGnutls *tls_stream;
-  GSimpleAsyncResult *simple = user_data;
-  gssize nwrote;
-  GError *error = NULL;
-
-  tls_stream = G_TLS_OUTPUT_STREAM_GNUTLS (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
-  g_object_unref (tls_stream);
-
-  nwrote = g_tls_connection_gnutls_write (tls_stream->priv->conn,
-                                         tls_stream->priv->buffer,
-                                         tls_stream->priv->count, FALSE,
-                                         tls_stream->priv->cancellable,
-                                         &error);
-  if (nwrote == -1 &&
-      g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      g_error_free (error);
-      return TRUE;
-    }
-
-  if (error)
-    {
-      g_simple_async_result_set_from_error (simple, error);
-      g_error_free (error);
-    }
-  else
-    g_simple_async_result_set_op_res_gssize (simple, nwrote);
-
-  if (tls_stream->priv->cancellable)
-    g_object_unref (tls_stream->priv->cancellable);
-  g_simple_async_result_complete (simple);
-  g_object_unref (simple);
-
-  return FALSE;
-}
-
-static void
-g_tls_output_stream_gnutls_write_async (GOutputStream        *stream,
-                                       const void           *buffer,
-                                       gsize                 count,
-                                       gint                  io_priority,
-                                       GCancellable         *cancellable,
-                                       GAsyncReadyCallback   callback,
-                                       gpointer              user_data)
-{
-  GTlsOutputStreamGnutls *tls_stream = G_TLS_OUTPUT_STREAM_GNUTLS (stream);
-  GSimpleAsyncResult *simple;
-  gssize nwrote;
-  GError *error = NULL;
-  GSource *source;
-
-  g_return_if_fail (tls_stream->priv->conn != NULL);
-
-  simple = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
-                                     g_tls_output_stream_gnutls_write_async);
-  nwrote = g_tls_connection_gnutls_write (tls_stream->priv->conn,
-                                         buffer, count, FALSE,
-                                         cancellable, &error);
-
-  if (nwrote >= 0 ||
-      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
-    {
-      if (error)
-       {
-         g_simple_async_result_set_from_error (simple, error);
-         g_error_free (error);
-       }
-      else
-       g_simple_async_result_set_op_res_gssize (simple, nwrote);
-      g_simple_async_result_complete_in_idle (simple);
-      g_object_unref (simple);
-      return;
-    }
-
-  if (error)
-    g_error_free (error);
-
-  tls_stream->priv->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
-  tls_stream->priv->buffer = buffer;
-  tls_stream->priv->count = count;
-
-  source = g_tls_connection_gnutls_create_source (tls_stream->priv->conn,
-                                                 G_IO_OUT,
-                                                 tls_stream->priv->cancellable);
-  g_source_set_callback (source,
-                        (GSourceFunc) g_tls_output_stream_gnutls_write_ready,
-                        simple, NULL);
-  g_source_attach (source, g_main_context_get_thread_default ());
-  g_source_unref (source);
-}
-
-static gssize
-g_tls_output_stream_gnutls_write_finish (GOutputStream  *stream,
-                                        GAsyncResult   *result,
-                                        GError        **error)
-{
-  g_return_val_if_fail (G_IS_TLS_OUTPUT_STREAM_GNUTLS (stream), -1);
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (stream), g_tls_output_stream_gnutls_write_async), -1);
-
-  return g_simple_async_result_get_op_res_gssize (G_SIMPLE_ASYNC_RESULT (result));
-}
-
-static gboolean
 g_tls_output_stream_gnutls_pollable_is_writable (GPollableOutputStream *pollable)
 {
   GTlsOutputStreamGnutls *tls_stream = G_TLS_OUTPUT_STREAM_GNUTLS (pollable);
@@ -220,8 +109,6 @@ g_tls_output_stream_gnutls_class_init (GTlsOutputStreamGnutlsClass *klass)
   gobject_class->dispose = g_tls_output_stream_gnutls_dispose;
 
   output_stream_class->write_fn = g_tls_output_stream_gnutls_write;
-  output_stream_class->write_async = g_tls_output_stream_gnutls_write_async;
-  output_stream_class->write_finish = g_tls_output_stream_gnutls_write_finish;
 }
 
 static void
index 2f05ecf..566b922 100644 (file)
@@ -187,42 +187,8 @@ g_tls_server_connection_gnutls_begin_handshake (GTlsConnectionGnutls *conn)
   gnutls_certificate_server_set_request (session, req_mode);
 }
 
-static gboolean
-g_tls_server_connection_gnutls_verify_peer (GTlsConnectionGnutls  *gnutls,
-                                           GTlsCertificate       *peer_certificate,
-                                           GTlsCertificateFlags  *errors)
-{
-  GTlsDatabase *database;
-  GError *error = NULL;
-
-  database = g_tls_connection_get_database (G_TLS_CONNECTION (gnutls));
-  if (database == NULL)
-    {
-      *errors |= G_TLS_CERTIFICATE_UNKNOWN_CA;
-      *errors |= g_tls_certificate_verify (peer_certificate, NULL, NULL);
-    }
-  else
-    {
-      *errors |= g_tls_database_verify_chain (database, peer_certificate,
-                                              G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT, NULL,
-                                              g_tls_connection_get_interaction (G_TLS_CONNECTION (gnutls)),
-                                              G_TLS_DATABASE_VERIFY_NONE,
-                                              NULL, &error);
-      if (error)
-        {
-          g_warning ("failure verifying certificate chain: %s",
-                     error->message);
-          g_clear_error (&error);
-        }
-    }
-
-  return g_tls_connection_emit_accept_certificate (G_TLS_CONNECTION (gnutls),
-                                                   peer_certificate, *errors);
-}
-
 static void
 g_tls_server_connection_gnutls_finish_handshake (GTlsConnectionGnutls  *gnutls,
-                                                gboolean               success,
                                                 GError               **inout_error)
 {
 }
@@ -298,7 +264,6 @@ g_tls_server_connection_gnutls_class_init (GTlsServerConnectionGnutlsClass *klas
 
   connection_gnutls_class->failed           = g_tls_server_connection_gnutls_failed;
   connection_gnutls_class->begin_handshake  = g_tls_server_connection_gnutls_begin_handshake;
-  connection_gnutls_class->verify_peer      = g_tls_server_connection_gnutls_verify_peer;
   connection_gnutls_class->finish_handshake = g_tls_server_connection_gnutls_finish_handshake;
 
   g_object_class_override_property (gobject_class, PROP_AUTHENTICATION_MODE, "authentication-mode");
index bda8a78..036207c 100644 (file)
@@ -1,6 +1,6 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
-noinst_LTLIBRARIES = \
+noinst_LTLIBRARIES += \
        libgiopkcs11.la
 
 libgiopkcs11_la_SOURCES =                      \
@@ -19,6 +19,6 @@ libgiopkcs11_la_LIBADD =                      \
        $(GLIB_LIBS)                            \
        $(NULL)
 
-INCLUDES +=                                    \
+AM_CPPFLAGS +=                                 \
        $(PKCS11_CFLAGS)                        \
        -DG_DISABLE_DEPRECATED
index 4cb84aa..ef91554 100644 (file)
@@ -1,29 +1,32 @@
-include $(top_srcdir)/Makefile.decl
+include $(top_srcdir)/glib-networking.mk
 
-INCLUDES +=                                    \
+AM_CPPFLAGS +=                                 \
        -I$(top_srcdir)/tls                     \
+       -I$(top_builddir)/tls                   \
        -DSRCDIR=\""$(abs_srcdir)"\"            \
        -DTOP_BUILDDIR=\""$(top_builddir)"\"
 
-noinst_PROGRAMS = $(TEST_PROGS)
-
 LDADD  = \
        $(GLIB_LIBS)
 
-TEST_PROGS +=         \
+test_programs =       \
        certificate   \
+       file-database \
        connection    \
        $(NULL)
 
 if HAVE_PKCS11
 
-TEST_PROGS +=              \
+test_programs +=           \
        pkcs11-util        \
        pkcs11-array       \
        pkcs11-pin         \
        pkcs11-slot
 
-INCLUDES += $(PKCS11_CFLAGS)
+AM_CPPFLAGS +=                 \
+       $(PKCS11_CFLAGS)        \
+       $(GNUTLS_CFLAGS)
+
 LDADD += $(top_builddir)/tls/pkcs11/libgiopkcs11.la $(PKCS11_LIBS)
 
 pkcs11_slot_SOURCES = pkcs11-slot.c \
@@ -32,9 +35,6 @@ pkcs11_slot_SOURCES = pkcs11-slot.c \
 
 endif
 
-DISTCLEANFILES = \
-       $(NULL)
-
 EXTRA_DIST += \
        files \
        $(NULL)
index 623ec30..408f3e2 100644 (file)
 #define TEST_FILE(name) (SRCDIR "/files/" name)
 
 typedef struct {
-  gchar *pem;
-  gsize pem_length;
-  GByteArray *der;
+  GTlsBackend *backend;
+  GType cert_gtype;
+  gchar *cert_pem;
+  gsize cert_pem_length;
+  GByteArray *cert_der;
+  gchar *key_pem;
+  gsize key_pem_length;
+  GByteArray *key_der;
 } TestCertificate;
 
 static void
@@ -39,39 +44,59 @@ setup_certificate (TestCertificate *test, gconstpointer data)
   gchar *contents;
   gsize length;
 
-  g_file_get_contents (TEST_FILE ("server.pem"),
-                      &test->pem, &test->pem_length, &error);
+  test->backend = g_tls_backend_get_default ();
+  test->cert_gtype = g_tls_backend_get_certificate_type (test->backend);
+
+  g_file_get_contents (TEST_FILE ("server.pem"), &test->cert_pem,
+                       &test->cert_pem_length, &error);
   g_assert_no_error (error);
 
   g_file_get_contents (TEST_FILE ("server.der"),
                       &contents, &length, &error);
   g_assert_no_error (error);
 
-  test->der = g_byte_array_new ();
-  g_byte_array_append (test->der, (guint8 *)contents, length);
+  test->cert_der = g_byte_array_new ();
+  g_byte_array_append (test->cert_der, (guint8 *)contents, length);
+  g_free (contents);
+
+  g_file_get_contents (TEST_FILE ("server-key.pem"), &test->key_pem,
+                       &test->key_pem_length, &error);
+  g_assert_no_error (error);
+
+  g_file_get_contents (TEST_FILE ("server-key.der"),
+                       &contents, &length, &error);
+  g_assert_no_error (error);
+
+  test->key_der = g_byte_array_new ();
+  g_byte_array_append (test->key_der, (guint8 *)contents, length);
   g_free (contents);
 }
 
 static void
-teardown_certificate (TestCertificate *test, gconstpointer data)
+teardown_certificate (TestCertificate *test,
+                      gconstpointer data)
 {
-  g_free (test->pem);
-  g_byte_array_free (test->der, TRUE);
+  g_free (test->cert_pem);
+  g_byte_array_free (test->cert_der, TRUE);
+
+  g_free (test->key_pem);
+  g_byte_array_free (test->key_der, TRUE);
 }
 
 static void
-test_create_destroy_certificate_pem (TestCertificate *test, gconstpointer data)
+test_create_pem (TestCertificate *test,
+                 gconstpointer data)
 {
   GTlsCertificate *cert;
   gchar *pem = NULL;
   GError *error = NULL;
 
-  cert = g_tls_certificate_new_from_pem (test->pem, test->pem_length, &error);
+  cert = g_tls_certificate_new_from_pem (test->cert_pem, test->cert_pem_length, &error);
   g_assert_no_error (error);
   g_assert (G_IS_TLS_CERTIFICATE (cert));
 
   g_object_get (cert, "certificate-pem", &pem, NULL);
-  g_assert_cmpstr (pem, ==, test->pem);
+  g_assert_cmpstr (pem, ==, test->cert_pem);
   g_free (pem);
 
   g_object_add_weak_pointer (G_OBJECT (cert), (gpointer *)&cert);
@@ -80,25 +105,43 @@ test_create_destroy_certificate_pem (TestCertificate *test, gconstpointer data)
 }
 
 static void
-test_create_destroy_certificate_der (TestCertificate *test, gconstpointer data)
+test_create_with_key_pem (TestCertificate *test,
+                          gconstpointer data)
+{
+  GTlsCertificate *cert;
+  GError *error = NULL;
+
+  cert = g_initable_new (test->cert_gtype, NULL, &error,
+                         "certificate-pem", test->cert_pem,
+                         "private-key-pem", test->key_pem,
+                         NULL);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  g_object_add_weak_pointer (G_OBJECT (cert), (gpointer *)&cert);
+  g_object_unref (cert);
+  g_assert (cert == NULL);
+}
+
+static void
+test_create_der (TestCertificate *test,
+                 gconstpointer data)
 {
   GTlsCertificate *cert;
   GByteArray *der = NULL;
   GError *error = NULL;
-  GTlsBackend *backend;
 
-  backend = g_tls_backend_get_default ();
-  cert = g_initable_new (g_tls_backend_get_certificate_type (backend),
-                         NULL, &error,
-                         "certificate", test->der,
+  cert = g_initable_new (test->cert_gtype, NULL, &error,
+                         "certificate", test->cert_der,
                          NULL);
   g_assert_no_error (error);
   g_assert (G_IS_TLS_CERTIFICATE (cert));
 
   g_object_get (cert, "certificate", &der, NULL);
   g_assert (der);
-  g_assert_cmpuint (der->len, ==, test->der->len);
-  g_assert (memcmp (der->data, test->der->data, der->len) == 0);
+  g_assert_cmpuint (der->len, ==, test->cert_der->len);
+  g_assert (memcmp (der->data, test->cert_der->data, der->len) == 0);
+
   g_byte_array_unref (der);
 
   g_object_add_weak_pointer (G_OBJECT (cert), (gpointer *)&cert);
@@ -107,21 +150,37 @@ test_create_destroy_certificate_der (TestCertificate *test, gconstpointer data)
 }
 
 static void
+test_create_with_key_der (TestCertificate *test,
+                          gconstpointer data)
+{
+  GTlsCertificate *cert;
+  GError *error = NULL;
+
+  cert = g_initable_new (test->cert_gtype, NULL, &error,
+                         "certificate", test->cert_der,
+                         "private-key", test->key_der,
+                         NULL);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  g_object_add_weak_pointer (G_OBJECT (cert), (gpointer *)&cert);
+  g_object_unref (cert);
+  g_assert (cert == NULL);
+}
+
+static void
 test_create_certificate_with_issuer (TestCertificate   *test,
                                      gconstpointer      data)
 {
   GTlsCertificate *cert, *issuer, *check;
   GError *error = NULL;
-  GTlsBackend *backend;
 
   issuer = g_tls_certificate_new_from_file (TEST_FILE ("ca.pem"), &error);
   g_assert_no_error (error);
   g_assert (G_IS_TLS_CERTIFICATE (issuer));
 
-  backend = g_tls_backend_get_default ();
-  cert = g_initable_new (g_tls_backend_get_certificate_type (backend),
-                         NULL, &error,
-                         "certificate-pem", test->pem,
+  cert = g_initable_new (test->cert_gtype, NULL, &error,
+                         "certificate-pem", test->cert_pem,
                          "issuer", issuer,
                          NULL);
   g_assert_no_error (error);
@@ -321,262 +380,52 @@ test_verify_certificate_bad_combo (TestVerify      *test,
 }
 
 static void
-test_verify_database_good (TestVerify      *test,
-                           gconstpointer    data)
+test_certificate_is_same (void)
 {
-  GTlsCertificateFlags errors;
+  GTlsCertificate *one;
+  GTlsCertificate *two;
+  GTlsCertificate *three;
   GError *error = NULL;
 
-  errors = g_tls_database_verify_chain (test->database, test->cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        test->identity, NULL, 0, NULL, &error);
+  one = g_tls_certificate_new_from_file (TEST_FILE ("client.pem"), &error);
   g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, 0);
 
-  errors = g_tls_database_verify_chain (test->database, test->cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        NULL, NULL, 0, NULL, &error);
-  g_assert_cmpuint (errors, ==, 0);
-}
-
-static void
-test_verify_database_bad_identity (TestVerify      *test,
-                                   gconstpointer    data)
-{
-  GSocketConnectable *identity;
-  GTlsCertificateFlags errors;
-  GError *error = NULL;
-
-  identity = g_network_address_new ("other.example.com", 80);
-
-  errors = g_tls_database_verify_chain (test->database, test->cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        identity, NULL, 0, NULL, &error);
+  two = g_tls_certificate_new_from_file (TEST_FILE ("client-and-key.pem"), &error);
   g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_BAD_IDENTITY);
-
-  g_object_unref (identity);
-}
-
-static void
-test_verify_database_bad_ca (TestVerify      *test,
-                             gconstpointer    data)
-{
-  GTlsCertificateFlags errors;
-  GTlsCertificate *cert;
-  GError *error = NULL;
-
-  /* Use another certificate which isn't in our CA list */
-  cert = g_tls_certificate_new_from_file (TEST_FILE ("server-self.pem"), &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (cert));
-
-  errors = g_tls_database_verify_chain (test->database, cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        test->identity, NULL, 0, NULL, &error);
-  g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_UNKNOWN_CA);
 
-  g_object_unref (cert);
-}
-
-static void
-test_verify_database_bad_before (TestVerify      *test,
-                                 gconstpointer    data)
-{
-  GTlsCertificateFlags errors;
-  GTlsCertificate *cert;
-  GError *error = NULL;
-
-  /* This is a certificate in the future */
-  cert = g_tls_certificate_new_from_file (TEST_FILE ("client-future.pem"), &error);
+  three = g_tls_certificate_new_from_file (TEST_FILE ("server.pem"), &error);
   g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (cert));
 
-  errors = g_tls_database_verify_chain (test->database, cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        NULL, NULL, 0, NULL, &error);
-  g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_NOT_ACTIVATED);
+  g_assert (g_tls_certificate_is_same (one, two) == TRUE);
+  g_assert (g_tls_certificate_is_same (two, one) == TRUE);
+  g_assert (g_tls_certificate_is_same (three, one) == FALSE);
+  g_assert (g_tls_certificate_is_same (one, three) == FALSE);
+  g_assert (g_tls_certificate_is_same (two, three) == FALSE);
+  g_assert (g_tls_certificate_is_same (three, two) == FALSE);
 
-  g_object_unref (cert);
-}
-
-static void
-test_verify_database_bad_expired (TestVerify      *test,
-                                  gconstpointer    data)
-{
-  GTlsCertificateFlags errors;
-  GTlsCertificate *cert;
-  GError *error = NULL;
-
-  /* This is a certificate in the future */
-  cert = g_tls_certificate_new_from_file (TEST_FILE ("client-past.pem"), &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (cert));
-
-  errors = g_tls_database_verify_chain (test->database, cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        NULL, NULL, 0, NULL, &error);
-  g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_EXPIRED);
-
-  g_object_unref (cert);
-}
-
-static void
-test_verify_database_bad_combo (TestVerify      *test,
-                                gconstpointer    data)
-{
-  GTlsCertificate *cert;
-  GSocketConnectable *identity;
-  GTlsCertificateFlags errors;
-  GError *error = NULL;
-
-  cert = g_tls_certificate_new_from_file (TEST_FILE ("server-self.pem"), &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (cert));
-
-  /*
-   * - Use is self signed
-   * - Use wrong identity.
-   */
-
-  identity = g_network_address_new ("other.example.com", 80);
-
-  errors = g_tls_database_verify_chain (test->database, cert,
-                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
-                                        identity, NULL, 0, NULL, &error);
-  g_assert_no_error (error);
-  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_UNKNOWN_CA |
-                    G_TLS_CERTIFICATE_BAD_IDENTITY);
-
-  g_object_unref (cert);
-  g_object_unref (identity);
-}
-
-/* -----------------------------------------------------------------------------
- * FILE DATABASE
- */
-
-typedef struct {
-  GTlsDatabase *database;
-  const gchar *path;
-} TestFileDatabase;
-
-static void
-setup_file_database (TestFileDatabase *test,
-                     gconstpointer     data)
-{
-  GError *error = NULL;
-
-  test->path = TEST_FILE ("ca-roots.pem");
-  test->database = g_tls_file_database_new (test->path, &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_DATABASE (test->database));
-}
-
-static void
-teardown_file_database (TestFileDatabase *test,
-                        gconstpointer     data)
-{
-  g_assert (G_IS_TLS_DATABASE (test->database));
-  g_object_add_weak_pointer (G_OBJECT (test->database),
-                            (gpointer *)&test->database);
-  g_object_unref (test->database);
-  g_assert (test->database == NULL);
-}
-
-static void
-test_file_database_handle (TestFileDatabase *test,
-                           gconstpointer     unused)
-{
-  GTlsCertificate *certificate;
-  GTlsCertificate *check;
-  GError *error = NULL;
-  gchar *handle;
-
-  /*
-   * ca.pem is in the ca-roots.pem that the test->database represents.
-   * So it should be able to create a handle for it and treat it as if it
-   * is 'in' the database.
-   */
-
-  certificate = g_tls_certificate_new_from_file (TEST_FILE ("ca.pem"), &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (certificate));
-
-  handle = g_tls_database_create_certificate_handle (test->database, certificate);
-  g_assert (handle != NULL);
-  g_assert (g_str_has_prefix (handle, "file:///"));
-
-  check = g_tls_database_lookup_certificate_for_handle (test->database, handle,
-                                                        NULL, G_TLS_DATABASE_LOOKUP_NONE,
-                                                        NULL, &error);
-  g_assert_no_error (error);
-  g_assert (G_IS_TLS_CERTIFICATE (check));
-
-  g_free (handle);
-  g_object_unref (check);
-  g_object_unref (certificate);
-}
-
-static void
-test_file_database_handle_invalid (TestFileDatabase *test,
-                                   gconstpointer     unused)
-{
-  GTlsCertificate *certificate;
-  GError *error = NULL;
-
-  certificate = g_tls_database_lookup_certificate_for_handle (test->database, "blah:blah",
-                                                              NULL, G_TLS_DATABASE_LOOKUP_NONE,
-                                                              NULL, &error);
-  g_assert_no_error (error);
-  g_assert (certificate == NULL);
-}
-
-/* -----------------------------------------------------------------------------
- * BACKEND
- */
-
-static void
-test_default_database_is_singleton (void)
-{
-  GTlsBackend *backend;
-  GTlsDatabase *database;
-  GTlsDatabase *check;
-
-  backend = g_tls_backend_get_default ();
-  g_assert (G_IS_TLS_BACKEND (backend));
-
-  database = g_tls_backend_get_default_database (backend);
-  g_assert (G_IS_TLS_DATABASE (database));
-
-  check = g_tls_backend_get_default_database (backend);
-  g_assert (database == check);
-
-  g_object_unref (database);
-  g_object_unref (check);
+  g_object_unref (one);
+  g_object_unref (two);
+  g_object_unref (three);
 }
 
 int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
   g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/tls/gnutls/.libs", TRUE);
   g_setenv ("GIO_USE_TLS", "gnutls", TRUE);
 
-  g_test_add_func ("/tls/backend/default-database-is-singleton",
-                   test_default_database_is_singleton);
-
-  g_test_add ("/tls/certificate/create-destroy-pem", TestCertificate, NULL,
-              setup_certificate, test_create_destroy_certificate_pem, teardown_certificate);
-  g_test_add ("/tls/certificate/create-destroy-der", TestCertificate, NULL,
-              setup_certificate, test_create_destroy_certificate_der, teardown_certificate);
+  g_test_add ("/tls/certificate/create-pem", TestCertificate, NULL,
+              setup_certificate, test_create_pem, teardown_certificate);
+  g_test_add ("/tls/certificate/create-der", TestCertificate, NULL,
+              setup_certificate, test_create_der, teardown_certificate);
+  g_test_add ("/tls/certificate/create-with-key-pem", TestCertificate, NULL,
+              setup_certificate, test_create_with_key_pem, teardown_certificate);
+  g_test_add ("/tls/certificate/create-with-key-der", TestCertificate, NULL,
+              setup_certificate, test_create_with_key_der, teardown_certificate);
   g_test_add ("/tls/certificate/create-with-issuer", TestCertificate, NULL,
               setup_certificate, test_create_certificate_with_issuer, teardown_certificate);
 
@@ -592,23 +441,8 @@ main (int   argc,
               setup_verify, test_verify_certificate_bad_expired, teardown_verify);
   g_test_add ("/tls/certificate/verify-bad-combo", TestVerify, NULL,
               setup_verify, test_verify_certificate_bad_combo, teardown_verify);
-  g_test_add ("/tls/database/verify-good", TestVerify, NULL,
-              setup_verify, test_verify_database_good, teardown_verify);
-  g_test_add ("/tls/database/verify-bad-identity", TestVerify, NULL,
-              setup_verify, test_verify_database_bad_identity, teardown_verify);
-  g_test_add ("/tls/database/verify-bad-ca", TestVerify, NULL,
-              setup_verify, test_verify_database_bad_ca, teardown_verify);
-  g_test_add ("/tls/database/verify-bad-before", TestVerify, NULL,
-              setup_verify, test_verify_database_bad_before, teardown_verify);
-  g_test_add ("/tls/database/verify-bad-expired", TestVerify, NULL,
-              setup_verify, test_verify_database_bad_expired, teardown_verify);
-  g_test_add ("/tls/database/verify-bad-combo", TestVerify, NULL,
-              setup_verify, test_verify_database_bad_combo, teardown_verify);
-
-  g_test_add ("/tls/file-database/test-handle", TestFileDatabase, NULL,
-              setup_file_database, test_file_database_handle, teardown_file_database);
-  g_test_add ("/tls/file-database/test-handle-invalid", TestFileDatabase, NULL,
-              setup_file_database, test_file_database_handle_invalid, teardown_file_database);
+
+  g_test_add_func ("/tls/certificate/is-same", test_certificate_is_same);
 
   return g_test_run();
 }
index 7ad66ad..6236f83 100644 (file)
@@ -40,6 +40,13 @@ typedef struct {
   GTlsAuthenticationMode auth_mode;
   gboolean rehandshake;
   GTlsCertificateFlags accept_flags;
+  GError *read_error;
+  gboolean expect_server_error;
+  GError *server_error;
+  gboolean server_closed;
+
+  char buf[128];
+  gssize nread, nwrote;
 } TestConnection;
 
 static void
@@ -74,16 +81,20 @@ teardown_connection (TestConnection *test, gconstpointer data)
       g_object_add_weak_pointer (G_OBJECT (test->service), (gpointer *)&test->service);
       g_object_unref (test->service);
       while (test->service)
-       g_main_context_iteration (NULL, TRUE);
+       g_main_context_iteration (NULL, FALSE);
     }
 
   if (test->server_connection)
     {
+      while (!test->server_closed)
+       g_main_context_iteration (NULL, FALSE);
+
       g_assert (G_IS_TLS_SERVER_CONNECTION (test->server_connection));
       g_object_add_weak_pointer (G_OBJECT (test->server_connection),
                                 (gpointer *)&test->server_connection);
       g_object_unref (test->server_connection);
-      g_assert (test->server_connection == NULL);
+      while (test->server_connection)
+       g_main_context_iteration (NULL, FALSE);
     }
 
   if (test->client_connection)
@@ -92,7 +103,8 @@ teardown_connection (TestConnection *test, gconstpointer data)
       g_object_add_weak_pointer (G_OBJECT (test->client_connection),
                                 (gpointer *)&test->client_connection);
       g_object_unref (test->client_connection);
-      g_assert (test->client_connection == NULL);
+      while (test->client_connection)
+       g_main_context_iteration (NULL, FALSE);
     }
 
   if (test->database)
@@ -101,12 +113,15 @@ teardown_connection (TestConnection *test, gconstpointer data)
       g_object_add_weak_pointer (G_OBJECT (test->database),
                                 (gpointer *)&test->database);
       g_object_unref (test->database);
-      g_assert (test->database == NULL);
+      while (test->database)
+       g_main_context_iteration (NULL, FALSE);
     }
 
   g_object_unref (test->address);
   g_object_unref (test->identity);
   g_main_loop_unref (test->loop);
+  g_clear_error (&test->read_error);
+  g_clear_error (&test->server_error);
 }
 
 static gboolean
@@ -141,13 +156,19 @@ on_rehandshake_finish (GObject        *object,
 }
 
 static void
-on_output_close_finish (GObject        *object,
+on_server_close_finish (GObject        *object,
                         GAsyncResult   *res,
                         gpointer        user_data)
 {
+  TestConnection *test = user_data;
   GError *error = NULL;
-  g_output_stream_close_finish (G_OUTPUT_STREAM (object), res, &error);
-  g_assert_no_error (error);
+
+  g_io_stream_close_finish (G_IO_STREAM (object), res, &error);
+  if (test->expect_server_error)
+    g_assert (error != NULL);
+  else
+    g_assert_no_error (error);
+  test->server_closed = TRUE;
 }
 
 static void
@@ -156,12 +177,11 @@ on_output_write_finish (GObject        *object,
                         gpointer        user_data)
 {
   TestConnection *test = user_data;
-  GError *error = NULL;
 
-  g_output_stream_write_finish (G_OUTPUT_STREAM (object), res, &error);
-  g_assert_no_error (error);
+  g_assert (test->server_error == NULL);
+  g_output_stream_write_finish (G_OUTPUT_STREAM (object), res, &test->server_error);
 
-  if (test->rehandshake)
+  if (!test->server_error && test->rehandshake)
     {
       test->rehandshake = FALSE;
       g_tls_connection_handshake_async (G_TLS_CONNECTION (test->server_connection),
@@ -170,8 +190,8 @@ on_output_write_finish (GObject        *object,
       return;
     }
 
-  g_output_stream_close_async (G_OUTPUT_STREAM (object), G_PRIORITY_DEFAULT, NULL,
-                               on_output_close_finish, test);
+  g_io_stream_close_async (test->server_connection, G_PRIORITY_DEFAULT, NULL,
+                           on_server_close_finish, test);
 }
 
 static gboolean
@@ -210,7 +230,7 @@ on_incoming_connection (GSocketService     *service,
 }
 
 static void
-start_server_service (TestConnection *test, GTlsAuthenticationMode auth_mode)
+start_async_server_service (TestConnection *test, GTlsAuthenticationMode auth_mode)
 {
   GError *error = NULL;
 
@@ -225,14 +245,14 @@ start_server_service (TestConnection *test, GTlsAuthenticationMode auth_mode)
   g_signal_connect (test->service, "incoming", G_CALLBACK (on_incoming_connection), test);
 }
 
-static GIOStream*
-start_server_and_connect_to_it (TestConnection *test, GTlsAuthenticationMode auth_mode)
+static GIOStream *
+start_async_server_and_connect_to_it (TestConnection *test, GTlsAuthenticationMode auth_mode)
 {
   GSocketClient *client;
   GError *error = NULL;
   GSocketConnection *connection;
 
-  start_server_service (test, auth_mode);
+  start_async_server_service (test, auth_mode);
 
   client = g_socket_client_new ();
   connection = g_socket_client_connect (client, G_SOCKET_CONNECTABLE (test->address),
@@ -244,26 +264,133 @@ start_server_and_connect_to_it (TestConnection *test, GTlsAuthenticationMode aut
 }
 
 static void
+run_echo_server (GThreadedSocketService *service,
+                GSocketConnection      *connection,
+                GObject                *source_object,
+                gpointer                user_data)
+{
+  TestConnection *test = user_data;
+  GTlsConnection *tlsconn;
+  GTlsCertificate *cert;
+  GError *error = NULL;
+  GInputStream *istream;
+  GOutputStream *ostream;
+  gssize nread, nwrote, total;
+  gchar buf[128];
+
+  cert = g_tls_certificate_new_from_file (TEST_FILE ("server-and-key.pem"), &error);
+  g_assert_no_error (error);
+
+  test->server_connection = g_tls_server_connection_new (G_IO_STREAM (connection),
+                                                         cert, &error);
+  g_assert_no_error (error);
+  g_object_unref (cert);
+
+  tlsconn = G_TLS_CONNECTION (test->server_connection);
+  g_tls_connection_handshake (tlsconn, NULL, &error);
+  g_assert_no_error (error);
+
+  istream = g_io_stream_get_input_stream (test->server_connection);
+  ostream = g_io_stream_get_output_stream (test->server_connection);
+
+  while (TRUE)
+    {
+      nread = g_input_stream_read (istream, buf, sizeof (buf), NULL, &error);
+      g_assert_no_error (error);
+      g_assert_cmpint (nread, >=, 0);
+
+      if (nread == 0)
+       break;
+
+      for (total = 0; total < nread; total += nwrote)
+       {
+         nwrote = g_output_stream_write (ostream, buf + total, nread - total, NULL, &error);
+         g_assert_no_error (error);
+       }
+
+      if (test->rehandshake)
+       {
+         test->rehandshake = FALSE;
+         g_tls_connection_handshake (tlsconn, NULL, &error);
+         g_assert_no_error (error);
+       }
+    }
+
+  g_io_stream_close (test->server_connection, NULL, &error);
+  g_assert_no_error (error);
+  test->server_closed = TRUE;
+}
+
+static void
+start_echo_server_service (TestConnection *test)
+{
+  GError *error = NULL;
+
+  test->service = g_threaded_socket_service_new (5);
+  g_socket_listener_add_address (G_SOCKET_LISTENER (test->service),
+                                 G_SOCKET_ADDRESS (test->address),
+                                 G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_TCP,
+                                 NULL, NULL, &error);
+  g_assert_no_error (error);
+
+  g_signal_connect (test->service, "run", G_CALLBACK (run_echo_server), test);
+}
+
+static GIOStream *
+start_echo_server_and_connect_to_it (TestConnection *test)
+{
+  GSocketClient *client;
+  GError *error = NULL;
+  GSocketConnection *connection;
+
+  start_echo_server_service (test);
+
+  client = g_socket_client_new ();
+  connection = g_socket_client_connect (client, G_SOCKET_CONNECTABLE (test->address),
+                                        NULL, &error);
+  g_assert_no_error (error);
+  g_object_unref (client);
+
+  return G_IO_STREAM (connection);
+}
+
+static void
+on_client_connection_close_finish (GObject        *object,
+                                  GAsyncResult   *res,
+                                  gpointer        user_data)
+{
+  TestConnection *test = user_data;
+  GError *error = NULL;
+
+  g_io_stream_close_finish (G_IO_STREAM (object), res, &error);
+  g_assert_no_error (error);
+
+  g_main_loop_quit (test->loop);
+}
+
+static void
 on_input_read_finish (GObject        *object,
                       GAsyncResult   *res,
                       gpointer        user_data)
 {
   TestConnection *test = user_data;
-  GError *error = NULL;
   gchar *line, *check;
 
   line = g_data_input_stream_read_line_finish (G_DATA_INPUT_STREAM (object), res,
-                                               NULL, &error);
-  g_assert_no_error (error);
-  g_assert (line);
+                                               NULL, &test->read_error);
+  if (!test->read_error)
+    {
+      g_assert (line);
 
-  check = g_strdup (TEST_DATA);
-  g_strstrip (check);
-  g_assert_cmpstr (line, ==, check);
-  g_free (check);
-  g_free (line);
+      check = g_strdup (TEST_DATA);
+      g_strstrip (check);
+      g_assert_cmpstr (line, ==, check);
+      g_free (check);
+      g_free (line);
+    }
 
-  g_main_loop_quit (test->loop);
+  g_io_stream_close_async (test->client_connection, G_PRIORITY_DEFAULT,
+                          NULL, on_client_connection_close_finish, test);
 }
 
 static void
@@ -286,7 +413,7 @@ test_basic_connection (TestConnection *test,
   GIOStream *connection;
   GError *error = NULL;
 
-  connection = start_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
   test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
   g_assert_no_error (error);
   g_object_unref (connection);
@@ -297,6 +424,9 @@ test_basic_connection (TestConnection *test,
 
   read_test_data_async (test);
   g_main_loop_run (test->loop);
+
+  g_assert_no_error (test->read_error);
+  g_assert_no_error (test->server_error);
 }
 
 static void
@@ -310,7 +440,7 @@ test_verified_connection (TestConnection *test,
   g_assert_no_error (error);
   g_assert (test->database);
 
-  connection = start_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
   test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
   g_assert_no_error (error);
   g_assert (test->client_connection);
@@ -324,6 +454,19 @@ test_verified_connection (TestConnection *test,
 
   read_test_data_async (test);
   g_main_loop_run (test->loop);
+
+  g_assert_no_error (test->read_error);
+  g_assert_no_error (test->server_error);
+}
+
+static void
+on_notify_accepted_cas (GObject *obj,
+                        GParamSpec *spec,
+                        gpointer user_data)
+{
+  gboolean *changed = user_data;
+  g_assert (*changed == FALSE);
+  *changed = TRUE;
 }
 
 static void
@@ -333,12 +476,14 @@ test_client_auth_connection (TestConnection *test,
   GIOStream *connection;
   GError *error = NULL;
   GTlsCertificate *cert;
+  GTlsCertificate *peer;
+  gboolean cas_changed;
 
   test->database = g_tls_file_database_new (TEST_FILE ("ca-roots.pem"), &error);
   g_assert_no_error (error);
   g_assert (test->database);
 
-  connection = start_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUIRED);
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUIRED);
   test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
   g_assert_no_error (error);
   g_assert (test->client_connection);
@@ -350,14 +495,27 @@ test_client_auth_connection (TestConnection *test,
   g_assert_no_error (error);
 
   g_tls_connection_set_certificate (G_TLS_CONNECTION (test->client_connection), cert);
-  g_object_unref (cert);
 
   /* All validation in this test */
   g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (test->client_connection),
                                                 G_TLS_CERTIFICATE_VALIDATE_ALL);
 
+  cas_changed = FALSE;
+  g_signal_connect (test->client_connection, "notify::accepted-cas",
+                    G_CALLBACK (on_notify_accepted_cas), &cas_changed);
+
   read_test_data_async (test);
   g_main_loop_run (test->loop);
+
+  g_assert_no_error (test->read_error);
+  g_assert_no_error (test->server_error);
+
+  peer = g_tls_connection_get_peer_certificate (G_TLS_CONNECTION (test->server_connection));
+  g_assert (peer != NULL);
+  g_assert (g_tls_certificate_is_same (peer, cert));
+  g_assert (cas_changed == TRUE);
+
+  g_object_unref (cert);
 }
 
 static void
@@ -369,13 +527,52 @@ test_client_auth_rehandshake (TestConnection *test,
 }
 
 static void
+test_client_auth_failure (TestConnection *test,
+                          gconstpointer   data)
+{
+  GIOStream *connection;
+  GError *error = NULL;
+  gboolean accepted_changed;
+
+  test->database = g_tls_file_database_new (TEST_FILE ("ca-roots.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (test->database);
+
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUIRED);
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_assert (test->client_connection);
+  g_object_unref (connection);
+
+  g_tls_connection_set_database (G_TLS_CONNECTION (test->client_connection), test->database);
+
+  /* No Certificate set */
+
+  /* All validation in this test */
+  g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (test->client_connection),
+                                                G_TLS_CERTIFICATE_VALIDATE_ALL);
+
+  accepted_changed = FALSE;
+  g_signal_connect (test->client_connection, "notify::accepted-cas",
+                    G_CALLBACK (on_notify_accepted_cas), &accepted_changed);
+
+  read_test_data_async (test);
+  g_main_loop_run (test->loop);
+
+  g_assert_error (test->read_error, G_TLS_ERROR, G_TLS_ERROR_CERTIFICATE_REQUIRED);
+  g_assert_error (test->server_error, G_TLS_ERROR, G_TLS_ERROR_CERTIFICATE_REQUIRED);
+
+  g_assert (accepted_changed == TRUE);
+}
+
+static void
 test_connection_no_database (TestConnection *test,
                              gconstpointer   data)
 {
   GIOStream *connection;
   GError *error = NULL;
 
-  connection = start_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
   test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
   g_assert_no_error (error);
   g_assert (test->client_connection);
@@ -394,6 +591,56 @@ test_connection_no_database (TestConnection *test,
 
   read_test_data_async (test);
   g_main_loop_run (test->loop);
+
+  g_assert_no_error (test->read_error);
+  g_assert_no_error (test->server_error);
+}
+
+static void
+handshake_failed_cb (GObject      *source,
+                    GAsyncResult *result,
+                    gpointer      user_data)
+{
+  TestConnection *test = user_data;
+  GError *error = NULL;
+
+  g_tls_connection_handshake_finish (G_TLS_CONNECTION (test->client_connection),
+                                    result, &error);
+  g_assert_error (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE);
+  g_clear_error (&error);
+
+  g_main_loop_quit (test->loop);
+}
+
+static void
+test_failed_connection (TestConnection *test,
+                       gconstpointer   data)
+{
+  GIOStream *connection;
+  GError *error = NULL;
+  GSocketConnectable *bad_addr;
+
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
+
+  bad_addr = g_network_address_new ("wrong.example.com", 80);
+  test->client_connection = g_tls_client_connection_new (connection, bad_addr, &error);
+  g_object_unref (bad_addr);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  g_tls_connection_handshake_async (G_TLS_CONNECTION (test->client_connection),
+                                   G_PRIORITY_DEFAULT, NULL,
+                                   handshake_failed_cb, test);
+  g_main_loop_run (test->loop);
+
+  g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (test->client_connection),
+                                                G_TLS_CERTIFICATE_VALIDATE_ALL);
+
+  read_test_data_async (test);
+  g_main_loop_run (test->loop);
+
+  g_assert_error (test->read_error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE);
+  g_assert_no_error (test->server_error);
 }
 
 static void
@@ -423,7 +670,7 @@ test_connection_socket_client (TestConnection *test,
   GIOStream *base;
   GError *error = NULL;
 
-  start_server_service (test, G_TLS_AUTHENTICATION_NONE);
+  start_async_server_service (test, G_TLS_AUTHENTICATION_NONE);
   client = g_socket_client_new ();
   g_socket_client_set_tls (client, TRUE);
   flags = G_TLS_CERTIFICATE_VALIDATE_ALL & ~G_TLS_CERTIFICATE_UNKNOWN_CA;
@@ -471,7 +718,7 @@ test_connection_socket_client_failed (TestConnection *test,
 {
   GSocketClient *client;
 
-  start_server_service (test, G_TLS_AUTHENTICATION_NONE);
+  start_async_server_service (test, G_TLS_AUTHENTICATION_NONE);
   client = g_socket_client_new ();
   g_socket_client_set_tls (client, TRUE);
   /* this time we don't adjust the validation flags */
@@ -483,14 +730,344 @@ test_connection_socket_client_failed (TestConnection *test,
   g_object_unref (client);
 }
 
+static void
+simul_async_read_complete (GObject      *object,
+                          GAsyncResult *result,
+                          gpointer      user_data)
+{
+  TestConnection *test = user_data;
+  gssize nread;
+  GError *error = NULL;
+
+  nread = g_input_stream_read_finish (G_INPUT_STREAM (object),
+                                     result, &error);
+  g_assert_no_error (error);
+
+  test->nread += nread;
+  g_assert_cmpint (test->nread, <=, TEST_DATA_LENGTH);
+
+  if (test->nread == TEST_DATA_LENGTH)
+    {
+      g_io_stream_close (test->client_connection, NULL, &error);
+      g_assert_no_error (error);
+      g_main_loop_quit (test->loop);
+    }
+  else
+    {
+      g_input_stream_read_async (G_INPUT_STREAM (object),
+                                test->buf + test->nread,
+                                TEST_DATA_LENGTH / 2,
+                                G_PRIORITY_DEFAULT, NULL,
+                                simul_async_read_complete, test);
+    }
+}
+
+static void
+simul_async_write_complete (GObject      *object,
+                           GAsyncResult *result,
+                           gpointer      user_data)
+{
+  TestConnection *test = user_data;
+  gssize nwrote;
+  GError *error = NULL;
+
+  nwrote = g_output_stream_write_finish (G_OUTPUT_STREAM (object),
+                                        result, &error);
+  g_assert_no_error (error);
+
+  test->nwrote += nwrote;
+  if (test->nwrote < TEST_DATA_LENGTH)
+    {
+      g_output_stream_write_async (G_OUTPUT_STREAM (object),
+                                  TEST_DATA + test->nwrote,
+                                  TEST_DATA_LENGTH - test->nwrote,
+                                  G_PRIORITY_DEFAULT, NULL,
+                                  simul_async_write_complete, test);
+    }
+}
+
+static void
+test_simultaneous_async (TestConnection *test,
+                        gconstpointer   data)
+{
+  GIOStream *connection;
+  GTlsCertificateFlags flags;
+  GError *error = NULL;
+
+  connection = start_echo_server_and_connect_to_it (test);
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  flags = G_TLS_CERTIFICATE_VALIDATE_ALL &
+    ~(G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY);
+  g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (test->client_connection),
+                                                flags);
+
+  memset (test->buf, 0, sizeof (test->buf));
+  test->nread = test->nwrote = 0;
+
+  g_input_stream_read_async (g_io_stream_get_input_stream (test->client_connection),
+                            test->buf, TEST_DATA_LENGTH / 2,
+                            G_PRIORITY_DEFAULT, NULL,
+                            simul_async_read_complete, test);
+  g_output_stream_write_async (g_io_stream_get_output_stream (test->client_connection),
+                              TEST_DATA, TEST_DATA_LENGTH / 2,
+                              G_PRIORITY_DEFAULT, NULL,
+                              simul_async_write_complete, test);
+
+  g_main_loop_run (test->loop);
+
+  g_assert_cmpint (test->nread, ==, TEST_DATA_LENGTH);
+  g_assert_cmpint (test->nwrote, ==, TEST_DATA_LENGTH);
+  g_assert_cmpstr (test->buf, ==, TEST_DATA);
+}
+
+static void
+test_simultaneous_async_rehandshake (TestConnection *test,
+                                    gconstpointer   data)
+{
+  test->rehandshake = TRUE;
+  test_simultaneous_async (test, data);
+}
+
+static gpointer
+simul_read_thread (gpointer user_data)
+{
+  TestConnection *test = user_data;
+  GInputStream *istream = g_io_stream_get_input_stream (test->client_connection);
+  GError *error = NULL;
+  gssize nread;
+
+  while (test->nread < TEST_DATA_LENGTH)
+    {
+      nread = g_input_stream_read (istream,
+                                  test->buf + test->nread,
+                                  MIN (TEST_DATA_LENGTH / 2, TEST_DATA_LENGTH - test->nread),
+                                  NULL, &error);
+      g_assert_no_error (error);
+
+      test->nread += nread;
+    }
+
+  return NULL;
+}
+
+static gpointer
+simul_write_thread (gpointer user_data)
+{
+  TestConnection *test = user_data;
+  GOutputStream *ostream = g_io_stream_get_output_stream (test->client_connection);
+  GError *error = NULL;
+  gssize nwrote;
+
+  while (test->nwrote < TEST_DATA_LENGTH)
+    {
+      nwrote = g_output_stream_write (ostream,
+                                     TEST_DATA + test->nwrote,
+                                     MIN (TEST_DATA_LENGTH / 2, TEST_DATA_LENGTH - test->nwrote),
+                                     NULL, &error);
+      g_assert_no_error (error);
+
+      test->nwrote += nwrote;
+    }
+
+  return NULL;
+}
+
+static void
+test_simultaneous_sync (TestConnection *test,
+                       gconstpointer   data)
+{
+  GIOStream *connection;
+  GTlsCertificateFlags flags;
+  GError *error = NULL;
+  GThread *read_thread, *write_thread;
+
+  connection = start_echo_server_and_connect_to_it (test);
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  flags = G_TLS_CERTIFICATE_VALIDATE_ALL &
+    ~(G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY);
+  g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (test->client_connection),
+                                                flags);
+
+  memset (test->buf, 0, sizeof (test->buf));
+  test->nread = test->nwrote = 0;
+
+  read_thread = g_thread_new ("reader", simul_read_thread, test);
+  write_thread = g_thread_new ("writer", simul_write_thread, test);
+
+  /* We need to run the main loop to get the GThreadedSocketService to
+   * receive the connection and spawn the server thread.
+   */
+  while (!test->server_connection)
+    g_main_context_iteration (NULL, FALSE);
+
+  g_thread_join (write_thread);
+  g_thread_join (read_thread);
+
+  g_assert_cmpint (test->nread, ==, TEST_DATA_LENGTH);
+  g_assert_cmpint (test->nwrote, ==, TEST_DATA_LENGTH);
+  g_assert_cmpstr (test->buf, ==, TEST_DATA);
+
+  g_io_stream_close (test->client_connection, NULL, &error);
+  g_assert_no_error (error);
+}
+
+static void
+test_simultaneous_sync_rehandshake (TestConnection *test,
+                                   gconstpointer   data)
+{
+  test->rehandshake = TRUE;
+  test_simultaneous_sync (test, data);
+}
+
+static void
+test_close_immediately (TestConnection *test,
+                        gconstpointer   data)
+{
+  GIOStream *connection;
+  GError *error = NULL;
+
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_NONE);
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  /*
+   * At this point the server won't get a chance to run. But regardless
+   * closing should not wait on the server, trying to handshake or something.
+   */
+  g_io_stream_close (test->client_connection, NULL, &error);
+  g_assert_no_error (error);
+}
+
+static void
+quit_loop_on_notify (GObject *obj,
+                    GParamSpec *spec,
+                    gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+
+  g_main_loop_quit (loop);
+}
+
+static void
+test_close_during_handshake (TestConnection *test,
+                            gconstpointer   data)
+{
+  GIOStream *connection;
+  GError *error = NULL;
+  GMainContext *context;
+  GMainLoop *loop;
+
+  g_test_bug ("688751");
+
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUESTED);
+  test->expect_server_error = TRUE;
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (test->client_connection, "notify::accepted-cas",
+                    G_CALLBACK (quit_loop_on_notify), loop);
+
+  context = g_main_context_new ();
+  g_main_context_push_thread_default (context);
+  g_tls_connection_handshake_async (G_TLS_CONNECTION (test->client_connection),
+                                   G_PRIORITY_DEFAULT,
+                                   NULL, NULL, NULL);
+  g_main_context_pop_thread_default (context);
+
+  /* Now run the (default GMainContext) loop, which is needed for
+   * the server side of things. The client-side handshake will run in
+   * a thread, but its callback will never be invoked because its
+   * context isn't running.
+   */
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+
+  /* At this point handshake_thread() has started (and maybe
+   * finished), but handshake_thread_completed() (and thus
+   * finish_handshake()) has not yet run. Make sure close doesn't
+   * block.
+   */
+  g_io_stream_close (test->client_connection, NULL, &error);
+  g_assert_no_error (error);
+
+  /* We have to let the handshake_async() call finish now, or
+   * teardown_connection() will assert.
+   */
+  g_main_context_iteration (context, TRUE);
+  g_main_context_unref (context);
+}
+
+static void
+test_write_during_handshake (TestConnection *test,
+                           gconstpointer   data)
+{
+  GIOStream *connection;
+  GError *error = NULL;
+  GMainContext *context;
+  GMainLoop *loop;
+  GOutputStream *ostream;
+
+  g_test_bug ("697754");
+
+  connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUESTED);
+  test->client_connection = g_tls_client_connection_new (connection, test->identity, &error);
+  g_assert_no_error (error);
+  g_object_unref (connection);
+
+  loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (test->client_connection, "notify::accepted-cas",
+                    G_CALLBACK (quit_loop_on_notify), loop);
+
+  context = g_main_context_new ();
+  g_main_context_push_thread_default (context);
+  g_tls_connection_handshake_async (G_TLS_CONNECTION (test->client_connection),
+                                   G_PRIORITY_DEFAULT,
+                                   NULL, NULL, NULL);
+  g_main_context_pop_thread_default (context);
+
+  /* Now run the (default GMainContext) loop, which is needed for
+   * the server side of things. The client-side handshake will run in
+   * a thread, but its callback will never be invoked because its
+   * context isn't running.
+   */
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+
+  /* At this point handshake_thread() has started (and maybe
+   * finished), but handshake_thread_completed() (and thus
+   * finish_handshake()) has not yet run. Make sure close doesn't
+   * block.
+   */
+
+  ostream = g_io_stream_get_output_stream (test->client_connection);
+  g_output_stream_write (ostream, TEST_DATA, TEST_DATA_LENGTH,
+                        G_PRIORITY_DEFAULT, &error);
+  g_assert_no_error (error);
+
+  /* We have to let the handshake_async() call finish now, or
+   * teardown_connection() will assert.
+   */
+  g_main_context_iteration (context, TRUE);
+  g_main_context_unref (context);
+}
+
 int
 main (int   argc,
       char *argv[])
 {
   int ret;
 
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
+  g_test_bug_base ("http://bugzilla.gnome.org/");
 
   g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
   g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/tls/gnutls/.libs", TRUE);
@@ -504,12 +1081,30 @@ main (int   argc,
               setup_connection, test_client_auth_connection, teardown_connection);
   g_test_add ("/tls/connection/client-auth-rehandshake", TestConnection, NULL,
               setup_connection, test_client_auth_rehandshake, teardown_connection);
+  g_test_add ("/tls/connection/client-auth-failure", TestConnection, NULL,
+              setup_connection, test_client_auth_failure, teardown_connection);
   g_test_add ("/tls/connection/no-database", TestConnection, NULL,
               setup_connection, test_connection_no_database, teardown_connection);
+  g_test_add ("/tls/connection/failed", TestConnection, NULL,
+              setup_connection, test_failed_connection, teardown_connection);
   g_test_add ("/tls/connection/socket-client", TestConnection, NULL,
               setup_connection, test_connection_socket_client, teardown_connection);
   g_test_add ("/tls/connection/socket-client-failed", TestConnection, NULL,
               setup_connection, test_connection_socket_client_failed, teardown_connection);
+  g_test_add ("/tls/connection/simultaneous-async", TestConnection, NULL,
+              setup_connection, test_simultaneous_async, teardown_connection);
+  g_test_add ("/tls/connection/simultaneous-sync", TestConnection, NULL,
+             setup_connection, test_simultaneous_sync, teardown_connection);
+  g_test_add ("/tls/connection/simultaneous-async-rehandshake", TestConnection, NULL,
+              setup_connection, test_simultaneous_async_rehandshake, teardown_connection);
+  g_test_add ("/tls/connection/simultaneous-sync-rehandshake", TestConnection, NULL,
+             setup_connection, test_simultaneous_sync_rehandshake, teardown_connection);
+  g_test_add ("/tls/connection/close-immediately", TestConnection, NULL,
+              setup_connection, test_close_immediately, teardown_connection);
+  g_test_add ("/tls/connection/close-during-handshake", TestConnection, NULL,
+              setup_connection, test_close_during_handshake, teardown_connection);
+  g_test_add ("/tls/connection/write-during-handshake", TestConnection, NULL,
+              setup_connection, test_write_during_handshake, teardown_connection);
 
   ret = g_test_run();
 
diff --git a/tls/tests/file-database.c b/tls/tests/file-database.c
new file mode 100644 (file)
index 0000000..5b6756f
--- /dev/null
@@ -0,0 +1,545 @@
+/* GIO TLS tests
+ *
+ * Copyright 2011 Collabora, Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Stef Walter <stefw@collabora.co.uk>
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+
+#include "gnutls/gtlscertificate-gnutls.h"
+
+#include <sys/types.h>
+#include <string.h>
+
+#define TEST_FILE(name) (SRCDIR "/files/" name)
+
+/* -----------------------------------------------------------------------------
+ * CERTIFICATE VERIFY
+ */
+
+typedef struct {
+  GTlsCertificate *cert;
+  GSocketConnectable *identity;
+  GTlsDatabase *database;
+} TestVerify;
+
+static void
+setup_verify (TestVerify     *test,
+              gconstpointer   data)
+{
+  GError *error = NULL;
+
+  test->cert = g_tls_certificate_new_from_file (TEST_FILE ("server.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (test->cert));
+
+  test->identity = g_network_address_new ("server.example.com", 80);
+
+  test->database = g_tls_file_database_new (TEST_FILE ("ca.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_DATABASE (test->database));
+}
+
+static void
+teardown_verify (TestVerify      *test,
+                 gconstpointer    data)
+{
+  g_assert (G_IS_TLS_CERTIFICATE (test->cert));
+  g_object_add_weak_pointer (G_OBJECT (test->cert),
+                            (gpointer *)&test->cert);
+  g_object_unref (test->cert);
+  g_assert (test->cert == NULL);
+
+  g_assert (G_IS_TLS_DATABASE (test->database));
+  g_object_add_weak_pointer (G_OBJECT (test->database),
+                            (gpointer *)&test->database);
+  g_object_unref (test->database);
+  g_assert (test->database == NULL);
+
+  g_object_add_weak_pointer (G_OBJECT (test->identity),
+                            (gpointer *)&test->identity);
+  g_object_unref (test->identity);
+  g_assert (test->identity == NULL);
+}
+
+static void
+test_verify_database_good (TestVerify      *test,
+                           gconstpointer    data)
+{
+  GTlsCertificateFlags errors;
+  GError *error = NULL;
+
+  errors = g_tls_database_verify_chain (test->database, test->cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        test->identity, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, 0);
+
+  errors = g_tls_database_verify_chain (test->database, test->cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        NULL, NULL, 0, NULL, &error);
+  g_assert_cmpuint (errors, ==, 0);
+}
+
+static void
+test_verify_database_bad_identity (TestVerify      *test,
+                                   gconstpointer    data)
+{
+  GSocketConnectable *identity;
+  GTlsCertificateFlags errors;
+  GError *error = NULL;
+
+  identity = g_network_address_new ("other.example.com", 80);
+
+  errors = g_tls_database_verify_chain (test->database, test->cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        identity, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_BAD_IDENTITY);
+
+  g_object_unref (identity);
+}
+
+static void
+test_verify_database_bad_ca (TestVerify      *test,
+                             gconstpointer    data)
+{
+  GTlsCertificateFlags errors;
+  GTlsCertificate *cert;
+  GError *error = NULL;
+
+  /* Use another certificate which isn't in our CA list */
+  cert = g_tls_certificate_new_from_file (TEST_FILE ("server-self.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  errors = g_tls_database_verify_chain (test->database, cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        test->identity, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_UNKNOWN_CA);
+
+  g_object_unref (cert);
+}
+
+static void
+test_verify_database_bad_before (TestVerify      *test,
+                                 gconstpointer    data)
+{
+  GTlsCertificateFlags errors;
+  GTlsCertificate *cert;
+  GError *error = NULL;
+
+  /* This is a certificate in the future */
+  cert = g_tls_certificate_new_from_file (TEST_FILE ("client-future.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  errors = g_tls_database_verify_chain (test->database, cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        NULL, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_NOT_ACTIVATED);
+
+  g_object_unref (cert);
+}
+
+static void
+test_verify_database_bad_expired (TestVerify      *test,
+                                  gconstpointer    data)
+{
+  GTlsCertificateFlags errors;
+  GTlsCertificate *cert;
+  GError *error = NULL;
+
+  /* This is a certificate in the future */
+  cert = g_tls_certificate_new_from_file (TEST_FILE ("client-past.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  errors = g_tls_database_verify_chain (test->database, cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        NULL, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_EXPIRED);
+
+  g_object_unref (cert);
+}
+
+static void
+test_verify_database_bad_combo (TestVerify      *test,
+                                gconstpointer    data)
+{
+  GTlsCertificate *cert;
+  GSocketConnectable *identity;
+  GTlsCertificateFlags errors;
+  GError *error = NULL;
+
+  cert = g_tls_certificate_new_from_file (TEST_FILE ("server-self.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (cert));
+
+  /*
+   * - Use is self signed
+   * - Use wrong identity.
+   */
+
+  identity = g_network_address_new ("other.example.com", 80);
+
+  errors = g_tls_database_verify_chain (test->database, cert,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        identity, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (errors, ==, G_TLS_CERTIFICATE_UNKNOWN_CA |
+                    G_TLS_CERTIFICATE_BAD_IDENTITY);
+
+  g_object_unref (cert);
+  g_object_unref (identity);
+}
+
+static GTlsCertificate *
+load_certificate_chain (const char  *filename,
+                        GError     **error)
+{
+  GList *certificates;
+  GTlsCertificate *chain = NULL;
+  GTlsBackend *backend;
+  GByteArray *der;
+  GList *l;
+
+  certificates = g_tls_certificate_list_new_from_file (filename, error);
+  if (certificates == NULL)
+    return NULL;
+
+  backend = g_tls_backend_get_default ();
+  certificates = g_list_reverse (certificates);
+  for (l = certificates; l != NULL; l = g_list_next (l))
+    {
+      g_object_get (l->data, "certificate", &der, NULL);
+      chain = g_object_new (g_tls_backend_get_certificate_type (backend),
+                            "certificate", der,
+                            "issuer", chain,
+                            NULL);
+      g_byte_array_unref (der);
+    }
+
+  g_list_free_full (certificates, g_object_unref);
+  return chain;
+}
+
+static gboolean
+is_certificate_in_chain (GTlsCertificate *chain,
+                         GTlsCertificate *cert)
+{
+  while (chain != NULL)
+    {
+      if (g_tls_certificate_is_same (chain, cert))
+        return TRUE;
+      chain = g_tls_certificate_get_issuer (chain);
+    }
+
+  return FALSE;
+}
+
+static void
+test_verify_with_incorrect_root_in_chain (void)
+{
+  GTlsCertificate *ca_verisign_sha1;
+  GTlsDatabase *database;
+  GError *error = NULL;
+  GTlsCertificate *chain;
+  GSocketConnectable *identity;
+  GTlsCertificateFlags errors;
+
+  /*
+   * This database contains a single anchor certificate of:
+   * C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority
+   */
+  database = g_tls_file_database_new (TEST_FILE ("ca-verisign-sha1.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_DATABASE (database));
+
+  ca_verisign_sha1 = g_tls_certificate_new_from_file (TEST_FILE ("ca-verisign-sha1.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (ca_verisign_sha1));
+
+  /*
+   * This certificate chain contains a root certificate with that same issuer, public key:
+   * C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority
+   *
+   * But it is not the same certificate in our database. However our database should
+   * verify this chain as valid, since the issuer fields and signatures should chain up
+   * to the certificate in our database.
+   */
+  chain = load_certificate_chain (TEST_FILE ("chain-with-verisign-md2.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (chain));
+
+  g_assert (g_tls_certificate_get_issuer (chain) != NULL);
+  g_assert (g_tls_certificate_get_issuer (g_tls_certificate_get_issuer (chain)) != NULL);
+  g_assert (is_certificate_in_chain (chain, chain));
+  g_assert (!is_certificate_in_chain (chain, ca_verisign_sha1));
+
+
+  identity = g_network_address_new ("secure-test.streamline-esolutions.com", 443);
+
+  errors = g_tls_database_verify_chain (database, chain,
+                                        G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER,
+                                        identity, NULL, 0, NULL, &error);
+  g_assert_no_error (error);
+  errors &= ~G_TLS_CERTIFICATE_EXPIRED; /* so that this test doesn't expire */
+  g_assert_cmpuint (errors, ==, 0);
+
+  g_object_unref (chain);
+  g_object_unref (ca_verisign_sha1);
+  g_object_unref (identity);
+  g_object_unref (database);
+}
+
+/* -----------------------------------------------------------------------------
+ * FILE DATABASE
+ */
+
+typedef struct {
+  GTlsDatabase *database;
+  const gchar *path;
+} TestFileDatabase;
+
+static void
+setup_file_database (TestFileDatabase *test,
+                     gconstpointer     data)
+{
+  GError *error = NULL;
+
+  test->path = TEST_FILE ("ca-roots.pem");
+  test->database = g_tls_file_database_new (test->path, &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_DATABASE (test->database));
+}
+
+static void
+teardown_file_database (TestFileDatabase *test,
+                        gconstpointer     data)
+{
+  g_assert (G_IS_TLS_DATABASE (test->database));
+  g_object_add_weak_pointer (G_OBJECT (test->database),
+                            (gpointer *)&test->database);
+  g_object_unref (test->database);
+  g_assert (test->database == NULL);
+}
+
+static void
+test_file_database_handle (TestFileDatabase *test,
+                           gconstpointer     unused)
+{
+  GTlsCertificate *certificate;
+  GTlsCertificate *check;
+  GError *error = NULL;
+  gchar *handle;
+
+  /*
+   * ca.pem is in the ca-roots.pem that the test->database represents.
+   * So it should be able to create a handle for it and treat it as if it
+   * is 'in' the database.
+   */
+
+  certificate = g_tls_certificate_new_from_file (TEST_FILE ("ca.pem"), &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (certificate));
+
+  handle = g_tls_database_create_certificate_handle (test->database, certificate);
+  g_assert (handle != NULL);
+  g_assert (g_str_has_prefix (handle, "file:///"));
+
+  check = g_tls_database_lookup_certificate_for_handle (test->database, handle,
+                                                        NULL, G_TLS_DATABASE_LOOKUP_NONE,
+                                                        NULL, &error);
+  g_assert_no_error (error);
+  g_assert (G_IS_TLS_CERTIFICATE (check));
+
+  g_free (handle);
+  g_object_unref (check);
+  g_object_unref (certificate);
+}
+
+static void
+test_file_database_handle_invalid (TestFileDatabase *test,
+                                   gconstpointer     unused)
+{
+  GTlsCertificate *certificate;
+  GError *error = NULL;
+
+  certificate = g_tls_database_lookup_certificate_for_handle (test->database, "blah:blah",
+                                                              NULL, G_TLS_DATABASE_LOOKUP_NONE,
+                                                              NULL, &error);
+  g_assert_no_error (error);
+  g_assert (certificate == NULL);
+}
+
+/* -----------------------------------------------------------------------------
+ * DATABASE
+ */
+
+static void
+test_anchors_property (void)
+{
+  GTlsDatabase *database;
+  gchar *anchor_filename = NULL;
+  GError *error = NULL;
+
+  database = g_tls_file_database_new (TEST_FILE ("ca.pem"), &error);
+  g_assert_no_error (error);
+
+  g_object_get (database, "anchors", &anchor_filename, NULL);
+  g_assert_cmpstr (anchor_filename, ==, TEST_FILE ("ca.pem"));
+  g_free (anchor_filename);
+
+  g_object_unref (database);
+}
+
+static gboolean
+certificate_is_in_list (GList *certificates,
+                        const gchar *filename)
+{
+  GTlsCertificate *cert;
+  GError *error = NULL;
+  GList *l;
+
+  cert = g_tls_certificate_new_from_file (filename, &error);
+  g_assert_no_error (error);
+
+  for (l = certificates; l != NULL; l = g_list_next (l))
+    {
+      if (g_tls_certificate_is_same (l->data, cert))
+        break;
+    }
+
+  g_object_unref (cert);
+
+  /* Had an early break from loop */
+  return l != NULL;
+}
+
+static void
+test_lookup_certificates_issued_by (void)
+{
+  /* This data is generated from the frob-certificate test tool in gcr library */
+  const guchar ISSUER[] = "\x30\x81\x86\x31\x13\x30\x11\x06\x0A\x09\x92\x26\x89\x93\xF2"
+                          "\x2C\x64\x01\x19\x16\x03\x43\x4F\x4D\x31\x17\x30\x15\x06\x0A"
+                          "\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x19\x16\x07\x45\x58\x41"
+                          "\x4D\x50\x4C\x45\x31\x1E\x30\x1C\x06\x03\x55\x04\x0B\x13\x15"
+                          "\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x41\x75\x74"
+                          "\x68\x6F\x72\x69\x74\x79\x31\x17\x30\x15\x06\x03\x55\x04\x03"
+                          "\x13\x0E\x63\x61\x2E\x65\x78\x61\x6D\x70\x6C\x65\x2E\x63\x6F"
+                          "\x6D\x31\x1D\x30\x1B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x09"
+                          "\x01\x16\x0E\x63\x61\x40\x65\x78\x61\x6D\x70\x6C\x65\x2E\x63"
+                          "\x6F\x6D";
+
+  GList *certificates;
+  GByteArray *issuer_dn;
+  GTlsDatabase *database;
+  GError *error = NULL;
+
+  database = g_tls_file_database_new (TEST_FILE ("non-ca.pem"), &error);
+  g_assert_no_error (error);
+
+  issuer_dn = g_byte_array_new ();
+  /* The null terminator is in the array/string above */
+  g_byte_array_append (issuer_dn, ISSUER, G_N_ELEMENTS (ISSUER) - 1);
+
+  certificates = g_tls_database_lookup_certificates_issued_by (database, issuer_dn, NULL,
+                                                               G_TLS_DATABASE_LOOKUP_NONE,
+                                                               NULL, &error);
+
+  g_byte_array_unref (issuer_dn);
+
+  g_assert_cmpuint (g_list_length (certificates), ==, 4);
+
+  g_assert (certificate_is_in_list (certificates, TEST_FILE ("client.pem")));
+  g_assert (certificate_is_in_list (certificates, TEST_FILE ("client-future.pem")));
+  g_assert (certificate_is_in_list (certificates, TEST_FILE ("client-past.pem")));
+  g_assert (certificate_is_in_list (certificates, TEST_FILE ("server.pem")));
+  g_assert (!certificate_is_in_list (certificates, TEST_FILE ("server-self.pem")));
+
+  g_list_free_full (certificates, g_object_unref);
+  g_object_unref (database);
+  g_byte_array_unref (issuer_dn);
+}
+
+static void
+test_default_database_is_singleton (void)
+{
+  GTlsBackend *backend;
+  GTlsDatabase *database;
+  GTlsDatabase *check;
+
+  backend = g_tls_backend_get_default ();
+  g_assert (G_IS_TLS_BACKEND (backend));
+
+  database = g_tls_backend_get_default_database (backend);
+  g_assert (G_IS_TLS_DATABASE (database));
+
+  check = g_tls_backend_get_default_database (backend);
+  g_assert (database == check);
+
+  g_object_unref (database);
+  g_object_unref (check);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
+  g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/tls/gnutls/.libs", TRUE);
+  g_setenv ("GIO_USE_TLS", "gnutls", TRUE);
+
+  g_test_add_func ("/tls/backend/default-database-is-singleton",
+                   test_default_database_is_singleton);
+
+  g_test_add ("/tls/database/verify-good", TestVerify, NULL,
+              setup_verify, test_verify_database_good, teardown_verify);
+  g_test_add ("/tls/database/verify-bad-identity", TestVerify, NULL,
+              setup_verify, test_verify_database_bad_identity, teardown_verify);
+  g_test_add ("/tls/database/verify-bad-ca", TestVerify, NULL,
+              setup_verify, test_verify_database_bad_ca, teardown_verify);
+  g_test_add ("/tls/database/verify-bad-before", TestVerify, NULL,
+              setup_verify, test_verify_database_bad_before, teardown_verify);
+  g_test_add ("/tls/database/verify-bad-expired", TestVerify, NULL,
+              setup_verify, test_verify_database_bad_expired, teardown_verify);
+  g_test_add ("/tls/database/verify-bad-combo", TestVerify, NULL,
+              setup_verify, test_verify_database_bad_combo, teardown_verify);
+  g_test_add_func ("/tls/database/verify-with-incorrect-root-in-chain",
+                   test_verify_with_incorrect_root_in_chain);
+
+  g_test_add_func ("/tls/file-database/anchors-property",
+                   test_anchors_property);
+  g_test_add_func ("/tls/file-database/lookup-certificates-issued-by",
+                   test_lookup_certificates_issued_by);
+
+  g_test_add ("/tls/file-database/test-handle", TestFileDatabase, NULL,
+              setup_file_database, test_file_database_handle, teardown_file_database);
+  g_test_add ("/tls/file-database/test-handle-invalid", TestFileDatabase, NULL,
+              setup_file_database, test_file_database_handle_invalid, teardown_file_database);
+
+  return g_test_run();
+}
diff --git a/tls/tests/files/ca-verisign-sha1.pem b/tls/tests/files/ca-verisign-sha1.pem
new file mode 100644 (file)
index 0000000..7df0e49
--- /dev/null
@@ -0,0 +1,48 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            3c:91:31:cb:1f:f6:d0:1b:0e:9a:b8:d0:44:bf:12:be
+    Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
+        Validity
+            Not Before: Jan 29 00:00:00 1996 GMT
+            Not After : Aug  2 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40:
+                    db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9:
+                    11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03:
+                    1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2:
+                    63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f:
+                    42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23:
+                    5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85:
+                    e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2:
+                    71:64:4c:65:2e:81:68:45:a7
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+         10:72:52:a9:05:14:19:32:08:41:f0:c5:6b:0a:cc:7e:0f:21:
+         19:cd:e4:67:dc:5f:a9:1b:e6:ca:e8:73:9d:22:d8:98:6e:73:
+         03:61:91:c5:7c:b0:45:40:6e:44:9d:8d:b0:b1:96:74:61:2d:
+         0d:a9:45:d2:a4:92:2a:d6:9a:75:97:6e:3f:53:fd:45:99:60:
+         1d:a8:2b:4c:f9:5e:a7:09:d8:75:30:d7:d2:65:60:3d:67:d6:
+         48:55:75:69:3f:91:f5:48:0b:47:69:22:69:82:96:be:c9:c8:
+         38:86:4a:7a:2c:73:19:48:69:4e:6b:7c:65:bf:0f:fc:70:ce:
+         88:90
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
+2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
+2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
+-----END CERTIFICATE-----
diff --git a/tls/tests/files/chain-with-verisign-md2.pem b/tls/tests/files/chain-with-verisign-md2.pem
new file mode 100644 (file)
index 0000000..88cbaf8
--- /dev/null
@@ -0,0 +1,81 @@
+ 0 s:/C=GB/ST=Lothian/L=Edinburgh/O=The Royal Bank of Scotland Group Plc/OU=Business Standard/CN=secure-test.streamline-esolutions.com
+   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
+-----BEGIN CERTIFICATE-----
+MIIFhzCCBG+gAwIBAgIQG8SaOaLKoAlziyc01IKx1TANBgkqhkiG9w0BAQUFADCB
+tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
+YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm
+VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTIwNjE1
+MDAwMDAwWhcNMTMwNjE2MjM1OTU5WjCBrjELMAkGA1UEBhMCR0IxEDAOBgNVBAgT
+B0xvdGhpYW4xEjAQBgNVBAcUCUVkaW5idXJnaDEtMCsGA1UEChQkVGhlIFJveWFs
+IEJhbmsgb2YgU2NvdGxhbmQgR3JvdXAgUGxjMRowGAYDVQQLFBFCdXNpbmVzcyBT
+dGFuZGFyZDEuMCwGA1UEAxQlc2VjdXJlLXRlc3Quc3RyZWFtbGluZS1lc29sdXRp
+b25zLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALj7qWBZQgxK
+TngnAIYCrmNWv9OPUeOhHWx/aRUwWNTQI5LnTfFq+IzrruiS296KoaMF89Veg6Li
+kIaR6GJ1LVNb5uWmNGo8zsXmSFeieqtREBfJHlu3G/1VcfpreqSiSi/8G6U/e6mZ
+tEuVUau5kw2cM92mzYPKV4h23aasNxc7UvhFTSr6Y3D1ImuHJcKYLcXhDGB35To5
+BqlIv9M7vURDbiStlOFOHoEe/nZ/86J073Vk0gc9TQUQ6d1yB5vgw5ZIi2kDHQ7b
+4yPYnD9j/RO6s6FimS/mM3m1c8GOLv3jtI0G/z30UIgGT4wXxqR8BY8dYULVO55M
+kn904sjk+GMCAwEAAaOCAZYwggGSMDAGA1UdEQQpMCeCJXNlY3VyZS10ZXN0LnN0
+cmVhbWxpbmUtZXNvbHV0aW9ucy5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC
+BaAwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL1NWUlNlY3VyZS1HMy1jcmwudmVy
+aXNpZ24uY29tL1NWUlNlY3VyZUczLmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB
+BxcDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw
+HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFA1EXBZT
+RMGCfh0gqyX0AWPYvnmlMHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0
+cDovL29jc3AudmVyaXNpZ24uY29tMEAGCCsGAQUFBzAChjRodHRwOi8vU1ZSU2Vj
+dXJlLUczLWFpYS52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlRzMuY2VyMA0GCSqGSIb3
+DQEBBQUAA4IBAQCvnbqk/8I12vNKIU0lMQ3+1Q67cS+Tith067RjwRt29D1TYxGc
+MV8GIDIXOjFc0BVrdXLniMuMP3ZfI7W2L7Gy8AfKNMseZ9r2tuF3fIHjXf9RChUA
+lUZe3eGuwhh3H64xGA+RbbEoTM8AMgvk9wu9P9I2qHmqFZOBoYwL8UY3SYO5Rzl1
+ggCAgj02evm6zWCmRLvZHJSDO7oWRw9Ke85VgJULRsn7jvGyFmc3W1uvuLOILj5P
+JhSKbb6eWVcWSqEKE+X1lLkUMd+8aBRjwkWHi5WVZX9NDscqBdl2DtYdmiVeFIqN
+9nGMGwm846SvURK6c5ySrExIkPnxVCOYXhGz
+-----END CERTIFICATE-----
+ 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
+   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIEpTCCBA6gAwIBAgIQfnbFd1jfGsI+zDL79hUa1TANBgkqhkiG9w0BAQUFADBf
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT
+LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTAwOTMwMDAwMDAwWhcNMTQwMTAxMjM1OTU5WjCBtTELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cu
+dmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMmVmVyaVNpZ24gQ2xhc3Mg
+MyBTZWN1cmUgU2VydmVyIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCxh4QfwgxF9byrJZenraI+nLr2wTm4i8rCrFbG5btljkRPTc5v7QlK
+1K9OEJxoiy6Ve4mbE8riNDTB81vzSXtig0iBdNGIeGwCU/m8f0MmV1gzgzszChew
+0E6RJK2GfWQS3HRKNKEdCuqWHQsV/KNLO85jiND4LQyUhhDKtpo9yus3nABINYYp
+UHjoRWPNGUFP9ZXse5jUxHGzUL4os4+guVOc9cosI6n9FAboGLSa6Dxugf3kzTU2
+s1HTaewSulZub5tXxYsU5w7HnO1KVGrJTcW/EbGuHGeBy0RVM5l/JJs/U0V/hhrz
+PPptf4H1uErT9YU3HLWm0AnkGHs4TvoPAgMBAAGjggGFMIIBgTASBgNVHRMBAf8E
+CDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4RQEHFwMwVjAoBggrBgEFBQcC
+ARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2NwczAqBggrBgEFBQcCAjAeGhxo
+dHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMA4GA1UdDwEB/wQEAwIBBjBtBggr
+BgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBSP
+5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9nby52ZXJpc2lnbi5jb20v
+dnNsb2dvLmdpZjAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVmVyaVNpZ25NUEtJ
+LTItNjAdBgNVHQ4EFgQUDURcFlNEwYJ+HSCrJfQBY9i+eaUwMQYDVR0fBCowKDAm
+oCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwDQYJKoZIhvcN
+AQEFBQADgYEALCbJk3A/lLYWx3aEmMiqkWjX3h00sBOmGUDc4wqwGR4aZdQ9ih8g
+KYjzFNWfxAaVZB5dDyc6ojY4wh8OsP4GWDYZfeeaHWBoczew8mukbaVpqrE97dTQ
+hRRcY4t+sIjMaXfRJi2w8dTeYSEMce6e3XVhijp5eJm8RlWXZJE9J0M=
+-----END CERTIFICATE-----
+# Note: this next certificate has:
+#   Signature Algorithm: md2WithRSAEncryption
+ 2 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
+   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
diff --git a/tls/tests/files/non-ca.pem b/tls/tests/files/non-ca.pem
new file mode 100644 (file)
index 0000000..42c2070
--- /dev/null
@@ -0,0 +1,90 @@
+client.pem:
+-----BEGIN CERTIFICATE-----
+MIIC3DCCAkUCAQkwDQYJKoZIhvcNAQEFBQAwgYYxEzARBgoJkiaJk/IsZAEZFgND
+T00xFzAVBgoJkiaJk/IsZAEZFgdFWEFNUExFMR4wHAYDVQQLExVDZXJ0aWZpY2F0
+ZSBBdXRob3JpdHkxFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMR0wGwYJKoZIhvcN
+AQkBFg5jYUBleGFtcGxlLmNvbTAeFw0xMTAxMTgwNjA0MTFaFw0yMTAxMTUwNjA0
+MTFaMGIxEzARBgoJkiaJk/IsZAEZFgNDT00xFzAVBgoJkiaJk/IsZAEZFgdFWEFN
+UExFMQ8wDQYDVQQDEwZDbGllbnQxITAfBgkqhkiG9w0BCQEWEmNsaWVudEBleGFt
+cGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMEgNDM/dg3t
+9DHNAPz/b87LSxEaKhoZ8AcNBym3LEOdCnXGEnKf0b9lkT5caXu5GAM84ahTCJ7n
+79RVNrqGKM7jbBdSX+ZUfkqJQPhOXD2+0niYQicH92nz78kxmjlbizvd3fM1BlO+
+C/++NWf2EAhORVAjvJrHNokJp3PTNRJ1WWteHeU9PwfGmWHKVc1IgvRFMH08604I
+ZzX5CcxIg/b56g27A7CBPh/KO/qKTDLFFNGc1T2asvY/P3+PeN6y+leFHStCTu7R
+Bi/l4hczZdnwq3BGT6mnjEN7wau2s7pA067SXimNOkYi5fgwspMHi8fJWmYyBypU
+mQBRzwfm77ECAwEAATANBgkqhkiG9w0BAQUFAAOBgQA3LuElj2QB9wQvmIxk2Jmb
+IPP2/WS8dwPoCv/N3+6nTx8yRsrILf4QsnEbbsxoYO5jW4r9Kt8m8B/M7YgnBDE9
+zlm7JbXKZf2isSm5TyT627Ymzxrzs5d+7o2eS7SN1DB6PyvRh2ye7EMbyEYD8ULi
+itDUkYkssNCVivYwVvJoMg==
+-----END CERTIFICATE-----
+
+client-future.pem:
+-----BEGIN CERTIFICATE-----
+MIIC3DCCAkUCAQowDQYJKoZIhvcNAQEFBQAwgYYxEzARBgoJkiaJk/IsZAEZFgND
+T00xFzAVBgoJkiaJk/IsZAEZFgdFWEFNUExFMR4wHAYDVQQLExVDZXJ0aWZpY2F0
+ZSBBdXRob3JpdHkxFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMR0wGwYJKoZIhvcN
+AQkBFg5jYUBleGFtcGxlLmNvbTAeFw0yMDAxMTgxNzI3MDNaFw0yMTAxMTcxNzI3
+MDNaMGIxEzARBgoJkiaJk/IsZAEZFgNDT00xFzAVBgoJkiaJk/IsZAEZFgdFWEFN
+UExFMQ8wDQYDVQQDEwZDbGllbnQxITAfBgkqhkiG9w0BCQEWEmNsaWVudEBleGFt
+cGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMEgNDM/dg3t
+9DHNAPz/b87LSxEaKhoZ8AcNBym3LEOdCnXGEnKf0b9lkT5caXu5GAM84ahTCJ7n
+79RVNrqGKM7jbBdSX+ZUfkqJQPhOXD2+0niYQicH92nz78kxmjlbizvd3fM1BlO+
+C/++NWf2EAhORVAjvJrHNokJp3PTNRJ1WWteHeU9PwfGmWHKVc1IgvRFMH08604I
+ZzX5CcxIg/b56g27A7CBPh/KO/qKTDLFFNGc1T2asvY/P3+PeN6y+leFHStCTu7R
+Bi/l4hczZdnwq3BGT6mnjEN7wau2s7pA067SXimNOkYi5fgwspMHi8fJWmYyBypU
+mQBRzwfm77ECAwEAATANBgkqhkiG9w0BAQUFAAOBgQBvt8v930fQtxR7f7Vcb1Hg
+irq1CtffsBqtKYupYg6IgloiRA6U5wdU0e6faA3Ppsmd4SmNKb9ZavIgnDBfx8MP
+1/IpsNOkg0366bP/zzkAhcXspo7PU8yZIqep//wT4TOFz04N8Lshqm8HUejShFdA
+fB8C0LX5Y/2219ZVMaaEbw==
+-----END CERTIFICATE-----
+
+client-past.pem:
+-----BEGIN CERTIFICATE-----
+MIIC3DCCAkUCAQswDQYJKoZIhvcNAQEFBQAwgYYxEzARBgoJkiaJk/IsZAEZFgND
+T00xFzAVBgoJkiaJk/IsZAEZFgdFWEFNUExFMR4wHAYDVQQLExVDZXJ0aWZpY2F0
+ZSBBdXRob3JpdHkxFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMR0wGwYJKoZIhvcN
+AQkBFg5jYUBleGFtcGxlLmNvbTAeFw0wMDAxMTgxNzI3NDdaFw0wMTAxMTcxNzI3
+NDdaMGIxEzARBgoJkiaJk/IsZAEZFgNDT00xFzAVBgoJkiaJk/IsZAEZFgdFWEFN
+UExFMQ8wDQYDVQQDEwZDbGllbnQxITAfBgkqhkiG9w0BCQEWEmNsaWVudEBleGFt
+cGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMEgNDM/dg3t
+9DHNAPz/b87LSxEaKhoZ8AcNBym3LEOdCnXGEnKf0b9lkT5caXu5GAM84ahTCJ7n
+79RVNrqGKM7jbBdSX+ZUfkqJQPhOXD2+0niYQicH92nz78kxmjlbizvd3fM1BlO+
+C/++NWf2EAhORVAjvJrHNokJp3PTNRJ1WWteHeU9PwfGmWHKVc1IgvRFMH08604I
+ZzX5CcxIg/b56g27A7CBPh/KO/qKTDLFFNGc1T2asvY/P3+PeN6y+leFHStCTu7R
+Bi/l4hczZdnwq3BGT6mnjEN7wau2s7pA067SXimNOkYi5fgwspMHi8fJWmYyBypU
+mQBRzwfm77ECAwEAATANBgkqhkiG9w0BAQUFAAOBgQBC3BOULAOkRFLKLajHIIB2
+VB0tHOFWuflP/LXso3ogGA8ItqbjacqjRHdTGK79etbxSTdi7k8owMVMPavJnBYk
+TraOkf/xxHo2zWy3XES1lniTUfGgKpjYNlALB6K6DJseZorSOmGA4KllL46MYwNu
+jsLO+5HkS/uNxlKo2l+xGw==
+-----END CERTIFICATE-----
+
+server.pem:
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIBBzANBgkqhkiG9w0BAQUFADCBhjETMBEGCgmSJomT8ixk
+ARkWA0NPTTEXMBUGCgmSJomT8ixkARkWB0VYQU1QTEUxHjAcBgNVBAsTFUNlcnRp
+ZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5jb20xHTAbBgkq
+hkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tMB4XDTExMDExNzE5NDcxN1oXDTIxMDEx
+NDE5NDcxN1owSzETMBEGCgmSJomT8ixkARkWA0NPTTEXMBUGCgmSJomT8ixkARkW
+B0VYQU1QTEUxGzAZBgNVBAMTEnNlcnZlci5leGFtcGxlLmNvbTBcMA0GCSqGSIb3
+DQEBAQUAA0sAMEgCQQDYScTxk55XBmbDM9zzwO+grVySE4rudWuzH2PpObIonqbf
+hRoAalKVluG9jvbHI81eXxCdSObv1KBP1sbN5RzpAgMBAAGjIjAgMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQADgYEAYx6fMqT1
+Gvo0jq88E8mc+bmp4LfXD4wJ7KxYeadQxt75HFRpj4FhFO3DOpVRFgzHlOEo3Fwk
+PZOKjvkT0cbcoEq5whLH25dHoQxGoVQgFyAP5s+7Vp5AlHh8Y/vAoXeEVyy/RCIH
+QkhUlAflfDMcrrYjsmwoOPSjhx6Mm/AopX4=
+-----END CERTIFICATE-----
+
+
+server-self.pem:
+-----BEGIN CERTIFICATE-----
+MIIBiDCCATICCQDJ4QeFpYPYljANBgkqhkiG9w0BAQUFADBLMRMwEQYKCZImiZPy
+LGQBGRYDQ09NMRcwFQYKCZImiZPyLGQBGRYHRVhBTVBMRTEbMBkGA1UEAxMSc2Vy
+dmVyLmV4YW1wbGUuY29tMB4XDTExMDExOTAzMTYzOFoXDTIxMDExNjAzMTYzOFow
+SzETMBEGCgmSJomT8ixkARkWA0NPTTEXMBUGCgmSJomT8ixkARkWB0VYQU1QTEUx
+GzAZBgNVBAMTEnNlcnZlci5leGFtcGxlLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sA
+MEgCQQDYScTxk55XBmbDM9zzwO+grVySE4rudWuzH2PpObIonqbfhRoAalKVluG9
+jvbHI81eXxCdSObv1KBP1sbN5RzpAgMBAAEwDQYJKoZIhvcNAQEFBQADQQAagc2P
+/lCfDwT3max+D2M7++KMDfGqiO3gI+hMarf/jAaQpcKO/9G95AnNo4lTd6W6/7yj
+YYvUupv+0vi4CtQG
+-----END CERTIFICATE-----
+
diff --git a/tls/tests/files/server-key.der b/tls/tests/files/server-key.der
new file mode 100644 (file)
index 0000000..ec4efb7
Binary files /dev/null and b/tls/tests/files/server-key.der differ
diff --git a/tls/tests/files/server-key.pem b/tls/tests/files/server-key.pem
new file mode 100644 (file)
index 0000000..3a19b3a
--- /dev/null
@@ -0,0 +1,10 @@
+-----BEGIN PRIVATE KEY-----
+MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA2EnE8ZOeVwZmwzPc
+88DvoK1ckhOK7nVrsx9j6TmyKJ6m34UaAGpSlZbhvY72xyPNXl8QnUjm79SgT9bG
+zeUc6QIDAQABAkBRFJZ32VbqWMP9OVwDJLiwC01AlYLnka0mIQZbT/2xq9dUc9GW
+U3kiVw4lL8v/+sPjtTPCYYdzHHOyDen6znVhAiEA9qJT7BtQvRxCvGrAhr9MS022
+tTdPbW829BoUtIeH64cCIQDggG5i48v7HPacPBIH1RaSVhXl8qHCpQD3qrIw3FMw
+DwIga8PqH5Sf5sHedy2+CiK0V4MRfoU4c3zQ6kArI+bEgSkCIQCLA1vXBiE31B5s
+bdHoYa1BXebfZVd+1Hd95IfEM5mbRwIgSkDuQwV55BBlvWph3U8wVIMIb4GStaH8
+W535W8UBbEg=
+-----END PRIVATE KEY-----
index 578106b..ee518a5 100644 (file)
 G_DEFINE_TYPE (MockInteraction, mock_interaction, G_TYPE_TLS_INTERACTION);
 
 static void
-on_cancellable_cancelled (GCancellable *cancellable,
-                          gpointer user_data)
-{
-  GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
-  GError *error = NULL;
-  if (!g_cancellable_set_error_if_cancelled (cancellable, &error))
-    g_assert_not_reached ();
-  g_simple_async_result_take_error (res, error);
-}
-
-static void
 mock_interaction_ask_password_async (GTlsInteraction    *interaction,
                                      GTlsPassword       *password,
                                      GCancellable       *cancellable,
@@ -47,19 +36,12 @@ mock_interaction_ask_password_async (GTlsInteraction    *interaction,
                                      gpointer            user_data)
 {
   MockInteraction *self = MOCK_INTERACTION (interaction);
-  GSimpleAsyncResult *res;
-
-  res = g_simple_async_result_new (G_OBJECT (interaction), callback, user_data,
-                                   mock_interaction_ask_password_async);
+  GTask *task;
 
-  if (cancellable)
-    g_cancellable_connect (cancellable,
-                           G_CALLBACK (on_cancellable_cancelled),
-                           g_object_ref (res),
-                           g_object_unref);
+  task = g_task_new (interaction, cancellable, callback, user_data);
 
   g_tls_password_set_value (password, (const guchar *)self->static_password, -1);
-  g_simple_async_result_complete_in_idle (res);
+  g_task_return_boolean (task, TRUE);
 }
 
 static GTlsInteractionResult
@@ -67,14 +49,16 @@ mock_interaction_ask_password_finish (GTlsInteraction    *interaction,
                                       GAsyncResult       *result,
                                       GError            **error)
 {
-  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (interaction),
-                                                        mock_interaction_ask_password_async),
-                                                        G_TLS_INTERACTION_UNHANDLED);
-
-  if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
-    return G_TLS_INTERACTION_FAILED;
-
-  return G_TLS_INTERACTION_HANDLED;
+  g_return_val_if_fail (g_task_is_valid (result, interaction),
+                       G_TLS_INTERACTION_UNHANDLED);
+
+  if (g_task_had_error (G_TASK (result)))
+    {
+      g_task_propagate_boolean (G_TASK (result), error);
+      return G_TLS_INTERACTION_FAILED;
+    }
+  else
+    return G_TLS_INTERACTION_HANDLED;
 }
 
 static GTlsInteractionResult
index 39f4b7c..7aecbf1 100644 (file)
@@ -530,9 +530,6 @@ mock_C_GetMechanismList (CK_SLOT_ID slotID,
       return CKR_OK;
     }
 
-  if (*pulCount < 0)
-    g_return_val_if_reached (CKR_BUFFER_TOO_SMALL);
-
   return CKR_OK;
 }
 
index ebb9e10..b5d5c3b 100644 (file)
@@ -265,7 +265,6 @@ int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_test_add ("/pkcs11/array/add-find", TestArray, NULL,
index 442b3dd..7888788 100644 (file)
@@ -44,8 +44,8 @@ static void
 teardown_pin (TestPin       *test,
               gconstpointer  unused)
 {
+  g_assert_cmpint (G_OBJECT (test->pin)->ref_count, ==, 1);
   g_object_unref (test->pin);
-  g_assert (!G_IS_OBJECT (test->pin));
 }
 
 static void
@@ -133,7 +133,6 @@ int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_test_add ("/pkcs11/pin/attributes", TestPin, NULL,
index c65f6c7..0d80044 100644 (file)
@@ -72,11 +72,11 @@ teardown_slot (TestSlot     *test,
 {
   CK_RV rv;
 
+  g_assert_cmpint (G_OBJECT (test->slot)->ref_count, ==, 1);
   g_object_unref (test->slot);
-  g_assert (!G_IS_OBJECT (test->slot));
 
+  g_assert_cmpint (G_OBJECT (test->not_present)->ref_count, ==, 1);
   g_object_unref (test->not_present);
-  g_assert (!G_IS_OBJECT (test->not_present));
 
   rv = p11_kit_finalize_module (&test->funcs);
   g_assert (rv == CKR_OK);
@@ -489,7 +489,6 @@ int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_test_add ("/pkcs11/slot/properties", TestSlot, NULL,
index 0864141..c27d8c1 100644 (file)
@@ -51,7 +51,6 @@ int
 main (int   argc,
       char *argv[])
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_test_add_func ("/pkcs11/util/propagate-error", test_propagate_error);
diff --git a/wss.pem b/wss.pem
new file mode 100644 (file)
index 0000000..7e57fb1
--- /dev/null
+++ b/wss.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFJjCCBA6gAwIBAgIHK5SIAlQmZjANBgkqhkiG9w0BAQsFADCBtDELMAkGA1UE
+BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
+BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMS0wKwYDVQQLEyRodHRwOi8vY2VydHMu
+Z29kYWRkeS5jb20vcmVwb3NpdG9yeS8xMzAxBgNVBAMTKkdvIERhZGR5IFNlY3Vy
+ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjAeFw0xNDEwMjcyMzQzMDRaFw0x
+NjEwMjgyMjA2MjRaMD0xITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRl
+ZDEYMBYGA1UEAwwPKi53ZWJzb2NrZXQub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA03U6RTqCO0AJEBbWcfjMkbm5iYs9P+l1nUJyyxh+t15koL3C
+3GwDxX5GuqOH6hXSpMBEG5xTatisnCp1+C9r8HRldLFYBVVmlQnQ7UsUYR1s0vWQ
+ma/wiU4tfTyfAGuz3/2OeRaYvMUQ3inzemZMSsPMLNcqbeCO9MZ59dbIxovm8Ltg
+yE/9BGOpBgFjVh1oORES4/7O4HRIzc6s2nnIyRM/1qEmA7cgCAGcJRdcGA+auZxs
+FKp9r+CHoXcQ3YHkdwZ1BVjsGuhBSXf8hgClgoSsiPRFx4MeoCdpcyh9q0MHkl+s
+WvPyEt5lIn3u/VdtCE+H/ezHJet6U/SIuQCqTwIDAQABo4IBsTCCAa0wDAYDVR0T
+AQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/
+BAQDAgWgMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ29kYWRkeS5jb20v
+Z2RpZzJzMS04Ny5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1tAQcXATA5MDcGCCsG
+AQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRv
+cnkvMHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29k
+YWRkeS5jb20vMEAGCCsGAQUFBzAChjRodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFk
+ZHkuY29tL3JlcG9zaXRvcnkvZ2RpZzIuY3J0MB8GA1UdIwQYMBaAFEDCvSeOzDSD
+MKIz1/tss/C0LIDOMCkGA1UdEQQiMCCCDyoud2Vic29ja2V0Lm9yZ4INd2Vic29j
+a2V0Lm9yZzAdBgNVHQ4EFgQUM4m1UYsENmVVekwEepAj/5qBfxswDQYJKoZIhvcN
+AQELBQADggEBAGgpao/D+YmXqAfBlbAJIEUUaz9LYIXH7+eyiW0knSdHw4zeI8eo
+Ct4qOxNnUR417qwMLnmF3Kz76uPpb7UPKWbZRXK4krBJLZnHvMb+KS1SxaeFbGnR
+Clp5a8zrrEr3kyTWrFNUswIMCnY8wwSx+BWneVgJErw5sGsYso4ykJwVS3coLcG2
+fOYeNmBI/Hr/bRhTVsvufub4VFxCoIDuNRXMEw2tvvvxBQuylIxatjOsdMnhE/l6
++N+v1Py6xTW+77UW49iz32I3fRCZqvy+SHTUMuBUBPRW8spqMas6VVJfd2J+N5Q6
+ks+e1QkGH0o/aGsfU1/9MsEja/EQh4ljPqk=
+-----END CERTIFICATE-----
+