⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htp4_url.c

📁 ISO 8583 with c++ for financial transaction standard
💻 C
字号:
/*
 * Tcp4u v 3.30          Last Revision 27/06/1997  3.30
 *
 *===========================================================================
 *
 * Project: Tcp4u,      Library for tcp protocol
 * File:    http4u_url.c
 * Purpose: everything which deals with URLs
 *
 *===========================================================================
 *
 * This software is Copyright (c) 1996-1998 by Philippe Jounin and Laurent Le Bras
 *
 * 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., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 *
 *
 *  If you make modifications to this software that you feel
 *  increases it usefulness for the rest of the community, please
 *  email the changes, enhancements, bug fixes as well as any and
 *  all ideas to me. This software is going to be maintained and
 *  enhanced as deemed necessary by the community.
 *
 *
 *             Philippe Jounin (ph.jounin@computer.org)
 */


#include "build.h"


#define  SLASH     '/'
#define  PERIOD    ':'
#define  HTTP_SERVICE  "http"
#define  HTTP_PORT      80


/* ------------------------------------------------------------------------- */
/* HttpIsValidURL: Retourne TRUE si l'URL est valide. De plus les differents */
/* composants de l'URL sont retournes a l'utilisateur                        */
/* ------------------------------------------------------------------------- */

BOOL API4U HttpIsValidURL 
                    (LPCSTR szURL, unsigned short far *lpPort, 
                     LPSTR  szService,   int  uServiceSize,
                     LPSTR  szHost,      int  uHostSize,
                     LPSTR  szFile,      int  uFileSize )
{
LPCSTR p, q;
int ServerLength;

   Tcp4uLog (LOG4U_HIPROC, "HttpIsValidURL");

    szHost[0]=0;
    /* default service : HTTP */
    Strcpyn (szService, HTTP_SERVICE, uServiceSize);

    /* if URL begins with "service:" do the job then forget it */
    p = Tcp4uStrIStr (szURL, "://");
    if (p!=NULL)
    {
       Strcpyn (szService, szURL, min ((int) (p - szURL + 1), uServiceSize) );
       szURL = p+1;
    }
    /* The same if URL begins with "//" */
    if (szURL[0]==SLASH  &&  szURL[1]==SLASH)   szURL+=2;

    /* URL is now either "Host:Port/File" or "Host/File" */
    for (p=szURL ; *p!=0  &&  *p!=SLASH ; p++);    if (*p==0)  p=NULL;
    if (szFile!=NULL)  Strcpyn (szFile, p==NULL ? "/" : p, uFileSize); 
    
    /* search for port which should be before File */
    if (p==NULL)  p = szURL + Strlen(szURL) - 1; /* last character */
    for (q=p ; q>szURL && *q!=':' ; q--);
    if (q==szURL)  q=NULL;  /* -> : not found */
   *lpPort = q==NULL ?  HTTP_PORT : Tcp4uAtoi (q+1);
 
    /* Host is to be copied */
    ServerLength =  p==NULL ? Strlen (szURL)  :
                        (q==NULL ? (p-szURL)    : (q-szURL) );  
    Strcpyn (szHost, szURL, min (ServerLength+1, uHostSize));
     
   Tcp4uLog (LOG4U_HIEXIT, "HttpIsValidURL");
return szHost[0]!=0; /* rejects if no host specified otherwise accepts anything */
} /* HttpIsValidURL */


#ifdef TEST
main (int argc, char *argv[])
{
char szService[10], szHost[10], szFichier[30]; /* short string to test limits */
unsigned short  usPort;
int Rc;

  /* ------------------------------init */
  memset (szService, 0, sizeof szService); 
  memset (szHost, 0, sizeof szHost); 
  memset (szFichier, 0, sizeof szFichier); 
  usPort = -1;
  /* ------------------------------init */

  Rc=HttpIsValidURL(argv[1], &usPort, szService, 10, szHost, 10, szFichier, 30);

  printf ("l'URL <%s> est-elle valide ? .... %s\n", 
          argv[1], Rc ? "oUi" : "Non");
  {
    printf ("Port    : %d\n", usPort);
    printf ("Serveur : <%s>\n", szHost);
    printf ("Service : <%s>\n", szService);
    printf ("Fichier : <%s>\n", szFichier);
  }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -