Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
TLMSP curl
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CYBER - Cyber Security
TS 103 523 MSP
TLMSP
TLMSP curl
Commits
82c47222
Commit
82c47222
authored
11 years ago
by
Steve Holme
Browse files
Options
Downloads
Patches
Plain Diff
examples: Added IMAP multi example
parent
0089e650
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
docs/examples/Makefile.inc
+2
-2
2 additions, 2 deletions
docs/examples/Makefile.inc
docs/examples/imap-multi.c
+143
-0
143 additions, 0 deletions
docs/examples/imap-multi.c
with
145 additions
and
2 deletions
docs/examples/Makefile.inc
+
2
−
2
View file @
82c47222
...
...
@@ -8,8 +8,8 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
externalsocket resolve progressfunc pop3-retr pop3-list pop3-uidl pop3-dele
\
pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi imap-list
\
imap-fetch imap-store imap-append imap-examine imap-search imap-create
\
imap-delete imap-copy imap-noop imap-ssl imap-tls
url2file sftpget ftpsget
\
postinmemory
imap-delete imap-copy imap-noop imap-ssl imap-tls
imap-multi url2file
\
sftpget ftpsget
postinmemory
# These examples require external dependencies that may not be commonly
# available on POSIX systems, so don't bother attempting to compile them here.
...
...
This diff is collapsed.
Click to expand it.
docs/examples/imap-multi.c
0 → 100644
+
143
−
0
View file @
82c47222
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
***************************************************************************/
#include
<stdio.h>
#include
<curl/curl.h>
/* This is a simple example showing how to fetch mail using libcurl's IMAP
* capabilities. It builds on the imap-fetch.c example to demonstrate how t
* use libcurl's multi interface.
*
* Note that this example requires libcurl 7.30.0 or above.
*/
static
struct
timeval
tvnow
(
void
)
{
struct
timeval
now
;
/* time() returns the value of time in seconds since the epoch */
now
.
tv_sec
=
(
long
)
time
(
NULL
);
now
.
tv_usec
=
0
;
return
now
;
}
static
long
tvdiff
(
struct
timeval
newer
,
struct
timeval
older
)
{
return
(
newer
.
tv_sec
-
older
.
tv_sec
)
*
1000
+
(
newer
.
tv_usec
-
older
.
tv_usec
)
/
1000
;
}
int
main
(
void
)
{
CURL
*
curl
;
CURLM
*
mcurl
;
int
still_running
=
1
;
struct
timeval
mp_start
;
curl_global_init
(
CURL_GLOBAL_DEFAULT
);
curl
=
curl_easy_init
();
if
(
!
curl
)
return
1
;
mcurl
=
curl_multi_init
();
if
(
!
mcurl
)
return
2
;
/* Set username and password */
curl_easy_setopt
(
curl
,
CURLOPT_USERNAME
,
"user"
);
curl_easy_setopt
(
curl
,
CURLOPT_PASSWORD
,
"secret"
);
/* This will fetch message 1 from the user's inbox */
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
"imap://imap.example.com/INBOX/;UID=1"
);
/* Tell the multi stack about our easy handle */
curl_multi_add_handle
(
mcurl
,
curl
);
/* Record the start time which we can use later */
mp_start
=
tvnow
();
/* We start some action by calling perform right away */
curl_multi_perform
(
mcurl
,
&
still_running
);
while
(
still_running
)
{
struct
timeval
timeout
;
fd_set
fdread
;
fd_set
fdwrite
;
fd_set
fdexcep
;
int
maxfd
=
-
1
;
int
rc
;
long
curl_timeo
=
-
1
;
/* Initialise the file descriptors */
FD_ZERO
(
&
fdread
);
FD_ZERO
(
&
fdwrite
);
FD_ZERO
(
&
fdexcep
);
/* Set a suitable timeout to play around with */
timeout
.
tv_sec
=
1
;
timeout
.
tv_usec
=
0
;
curl_multi_timeout
(
mcurl
,
&
curl_timeo
);
if
(
curl_timeo
>=
0
)
{
timeout
.
tv_sec
=
curl_timeo
/
1000
;
if
(
timeout
.
tv_sec
>
1
)
timeout
.
tv_sec
=
1
;
else
timeout
.
tv_usec
=
(
curl_timeo
%
1000
)
*
1000
;
}
/* Get file descriptors from the transfers */
curl_multi_fdset
(
mcurl
,
&
fdread
,
&
fdwrite
,
&
fdexcep
,
&
maxfd
);
/* In a real-world program you OF COURSE check the return code of the
function calls. On success, the value of maxfd is guaranteed to be
greater or equal than -1. We call select(maxfd + 1, ...), specially in
case of (maxfd == -1), we call select(0, ...), which is basically equal
to sleep. */
rc
=
select
(
maxfd
+
1
,
&
fdread
,
&
fdwrite
,
&
fdexcep
,
&
timeout
);
if
(
tvdiff
(
tvnow
(),
mp_start
)
>
MULTI_PERFORM_HANG_TIMEOUT
)
{
fprintf
(
stderr
,
"ABORTING: Since it seems that we would have run forever.
\n
"
);
break
;
}
switch
(
rc
)
{
case
-
1
:
/* select error */
break
;
case
0
:
/* timeout */
default:
/* action */
curl_multi_perform
(
mcurl
,
&
still_running
);
break
;
}
}
/* Always cleanup */
curl_multi_remove_handle
(
mcurl
,
curl
);
curl_multi_cleanup
(
mcurl
);
curl_easy_cleanup
(
curl
);
curl_global_cleanup
();
return
0
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment